对角线的回形矩阵怎么输出

img

img

   public static int[,] myMainStep(int n)
        {           
            int[,] mymainRect = new int[n, n];
            int count = 0;
            int step = n;
            //对角线
            for (int m = 0; m < n; m++)
            {
                count++;
                mymainRect[m, m] = count;
            }
            step--;
            for (int i = n - 1; i > 0; i--)
            {
                //左下 往左               
                for (int j = 0; j < step; j++)
                {
                    count++;
                    mymainRect[i, i - j - 1] = count;
                }
                step--;
                //左下往上
                for (int k = 0; k < step; k++)
                {
                    count++;
                    mymainRect[i - k - 1, i - step - 1] = count;
                }
                step++;
                //右上往右
                for (int p = 0; p < step; p++)
                {
                    count++;
                    mymainRect[n - i - 1, n - i - 1 + p + 1] = count;
                }
                step--;
                //右上往下
                for (int q = 0; q < step; q++)
                {
                    count++;
                    mymainRect[n - i - 1 + q + 1, n - i - 1 + step + 1] = count;
                }
                step--;
            }
            return mymainRect;
        }

这样

有点复杂,1-5和其它的规律似乎不一致
从5开始,根据下标考虑,如果横坐标>=5,那么纵坐标变为--,横坐标保持4;如果纵坐标<0,那么纵坐标保持为0,横坐标--,如果横坐标<0,则横坐标保持为0,纵坐标++,如果纵坐标>=5,那么纵坐标保持为4,横坐标++
如果下一个格已经有数据,那么往顺时针方向找个空的,这里从19找到20有点啰嗦。

1 22 23 24 25 26 27 28
21 2 44 45 46 47 48 29
20 43 3 58 59 60 49 30
19 42 57 4 64 61 50 31
18 41 56 63 5 62 51 32
17 40 55 54 53 6 52 33
16 39 38 37 36 35 7 34
15 14 13 12 11 10 9 8

这样对吗?

1 22 23 24 25 26 27 28
21 2 44 45 46 47 48 29
20 43 3 58 59 60 49 30
19 42 57 4 64 61 50 31
18 41 56 63 5 62 51 32
17 40 55 54 53 6 52 33
16 39 38 37 36 35 7 34
15 14 13 12 11 10 9 8

img