题目描述
一个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
请问怎么做
#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;
}