代码思路
可以观察到走相同距离的不同方向有俩,螺旋线方向为右下左上,按观察所得可写代码。
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e3+10; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; int a[N][N]; void solve() { int n;cin>>n; int x,y; if(n%2) x=(n+1)/2,y=(n+1)/2; else x=n/2,y=n/2; int sum=0; a[x][y]=sum; int l=1; int k=0; while(sum<n*n) { for(int i=1;i<=2;i++) { for(int j=1;j<=l;j++) { if(sum>n*n) break; x=x+dx[k]; y=y+dy[k]; a[x][y]=++sum; } k=(k+1)%4; } l++; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<a[i][j]<<' '; } cout<<endl; } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T;cin>>T; while(T--) { solve(); } return 0; }