如何使用C# 语言实现螺旋加上蛇形的矩阵动态生成?当n=4时,矩阵如此
发布网友
发布时间:2022-04-29 05:34
我来回答
共2个回答
热心网友
时间:2023-10-12 23:43
哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}
}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();
热心网友
时间:2023-10-12 23:43
哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}
}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();
热心网友
时间:2023-10-12 23:44
没明白说什么追问抱歉,请再看一下,谢谢!
热心网友
时间:2023-10-12 23:44
没明白说什么追问抱歉,请再看一下,谢谢!
热心网友
时间:2023-10-12 23:43
哎,好久没弄算法了搞了挺久才算给弄出来了,未经优化代码如下:
int n = 4;
int t = n;
int max=n*n;
int row = 0, col = 0;
int m = (max - n) / 2 + n;//螺旋的最大值
int[,] result = new int[t,t];
bool flag = true;//对角标志
for (int i = 1; i <= m; i++) {//螺旋部分
if ((flag && result[row,col < n ? col : n - 1] == 0)) {//横向螺旋
result[row,col] = i;
col++;
continue;
}
if (flag && (result[row < n - 1 ? row + 1 : n - 1,col - 1] == 0)) {//纵向螺旋
row++;
result[row,col - 1] = i;
continue;
}
//对角斜向上
if (flag)
col--;
flag = false;
col--;
row--;
result[row,col] = i;
if (result[row - 1 < 0 ? 0 : row - 1,col - 1 < 0 ? 0 : col - 1] == 0) {//斜对角数未填充
continue;
} else {
if (result[row,col + 1] != 0) {
continue;
} else {
col++;
flag = true;
}
}
}
row = 1;
col = 0;
n = t;
flag = true;
for (int i = m + 1; i <= max; i++) {//蛇形部分
if (flag && result[row >= n ? n - 1 : row,col >= n - 2 ? n - 2 : col] == 0) {//斜向下对角
result[row,col] = i;
row++;
col++;
continue;
}
//斜向上对角
if (flag) {
col--;
}
flag = false;
row--;
col--;
if (col >= 0)
result[row,col] = i;
else {//到达最左边,折返
row = row + 2;
col++;
flag = true;
i--;
}
}
//输出结果
int r = 0;
String temp = " ";
for (int j = 0; j < t; j++) {
for (int k = 0; k < t; k++) {
temp = " ";
r = result[j,k];
if (r < 10)
temp += " ";
Console.Write(r + temp);
}
Console.WriteLine();
}
Console.WriteLine("按任意键退出");
Console.ReadLine();
热心网友
时间:2023-10-12 23:44
没明白说什么追问抱歉,请再看一下,谢谢!