Description
以下是一个5*5阶螺旋方阵。设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进)。
Input
输入一个整数T,表示有T组输入数据,接下来连续输入T行,每行输入整数n表示n阶矩阵
Output
输出对应的n*n阶螺旋方阵。
Sample Input
1
5
Sample Output
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//螺旋方向:向右,向下,向左,向上
int visited[10010][10010];//记录是否已经走过
int mat[10010][10010];
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
memset(mat,0,sizeof(mat));
memset(visited,0,sizeof(visited));
int sum=0;
int tx=0,ty=0;
int d=0;
while(sum!=n*n)
{
while(visited[tx][ty]==0&&tx<n&&ty<n&&tx>=0&&ty>=0)//碰到已走过的,就改变方向。否则执行循环
{
visited[tx][ty]=1;
sum++;
mat[tx][ty]=sum;
tx=tx+dir[d][0];
ty=ty+dir[d][1];
}
tx=tx-dir[d][0];
ty=ty-dir[d][1];
d=(d+1)%4;
tx=tx+dir[d][0];
ty=ty+dir[d][1];
}
for(int i=0;i<n;i++)//输出
{
for(int j=0;j<n;j++)
cout<<setw(5)<<left<<mat[i][j]<<" ";//向左对齐,宽度为5
cout<<endl;
}
}
return 0;
}