作业帮 > 数学 > 作业

一个矩阵算法,用C#语言

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:数学作业 时间:2024/07/31 05:56:20
一个矩阵算法,用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#语言
这是螺旋矩阵,
方法: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;
}