螺旋方阵🤢≡(▔﹏▔)≡≡(▔﹏▔)≡

题目描述
一个n行n列的螺旋方阵按照如下方法生成:从方阵的左下角(第n行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则左转。重复上述操作直至经过方阵中所有格子。根据经过顺序,在格子中依次填入1,2,3,n便构成一个螺旋访问。下面是一个n=4的螺旋方阵。

编程输入一个正整数n,生成一个n×n的螺旋方阵。
输入
一行一个正整数n,1≤n≤20
输出
共n行 每行n个正整数 每个正整数占5列
样例输入 Copy
4
样例输出 Copy
10 9 8 7
11 16 15 6
12 13 14 5
1 2 3 4
请问怎么做

C/C++实现螺旋方阵算法_u013561603的专栏-CSDN博客_c++螺旋方阵 Description下面是一个5*5螺旋方阵。你的任务是输出按逆时针方向旋进的n*n螺旋方阵。1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9Input输入有多行,每行有1个整数n,(1n=100)。 https://blog.csdn.net/u013561603/article/details/39394257



#include <iostream>

using namespace std;


void snakeLikeMat(int **a, int n)
{
    int num = 1;
    int total = n*n;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i % 2 == 0)
            {
                a[j][i - j] = num++;
            }
            else
            {
                a[i - j][j] = num++;
            }
        }
        
    }
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i%2==0)
            {
                a[n - 1 - j][n - 1 - i + j] = total--;
            }
            else
            {
                a[n - 1 - i + j][n - 1 - j] = total--;
            }
        }
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    
    int ha = 0;
    cin >> ha;
    int **a = new int*[ha];
    for (int i = 0; i < ha; i++)
    {
        a[i] = new int[ha];
    }
    snakeLikeMat(a, ha);
    for (int i = 0; i < ha; i++)
    {
        for (int j = 0; j < ha; j++)
        {
            cout << a[i][j] << "\t";
        }
        cout << endl;
    }
    for (int i = 0; i < ha; i++)
    {
        delete [] a[i];
    }
    delete[] a;
    return 0;
}