一个矩阵算法,用C#语言1 789612543 21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 18:28:31
一个矩阵算法,用C#语言1 789612543 21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13
一个矩阵算法,用C#语言
1
789
612
543
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
一个矩阵算法,用C#语言1 789612543 21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13
这是螺旋矩阵,
方法:GetSpiralMatrix() ;
参数row:矩阵的大小(任意正整数)
楼主的问题,分别输入 1,3,5即可打印出来.
下面的思路就是先定位到矩阵中央,然后顺时针方向旋转:
static void Main(string[] args)
{
int[,] arr = GetSpiralMatrix(5);
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[j, i] + "\t");
}
Console.WriteLine();
}
Console.Read();
}
//螺旋矩阵(由内向外)
static int[,] GetSpiralMatrix(int row)
{
int[,] intArr = new int[row, row];
int x = row % 2 == 0 ? row / 2 - 1 : row / 2;//计算初始x,y坐标在正中间
int y = x;
int m = 1;//初始腰围...
int n = 0;
string type = "R";
for (int i = 1; i <= row * row; i++)
{
intArr[x, y] = i;
switch (type)
{
case "R"://向右
x++; n++;
if (m == n) { type = "D"; n = 0; }
break;
case "D"://向下(腰围加粗)
y++; n++;
if (m == n) { m++; type = "L"; n = 0; }
break;
case "L"://向左
x--; n++;
if (m == n) { type = "U"; n = 0; }
break;
case "U"://向上(腰围加粗)
y--; n++;
if (m == n) { m++; type = "R"; n = 0; }
break;
}
}
return intArr;
}