螺旋数组
最近看的一本数据结构书里,在数组与广义表部分中间展示了一道螺旋数组题。初见这道题时是在我刚学完C语言第一次在隔壁发博客的时候,当时思路就是循环嵌套,但各种flag变量设置的自己头晕眼花。印象深刻,再见就觉得很有趣,纪念一下!

#include<iostream> #include<algorithm> using namespace std;
typedef struct { int x; int y; }pt; //位置
int m[30][30]; pt here,next,dt[4]={0,1,1,0,0,-1,-1,0};//当前位置、下个位置。右下左上方向数组 void Init(int n) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) m[i][j]=0; } for(int i=0;i<=n+1;i++) { m[i][0]=-1; m[0][i]=-1; m[n+1][i]=-1; m[i][n+1]=-1; } } void print(int n) { cout<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<m[i][j]<<" "; cout<<endl<<endl; } } void solve(int n) { int ant=1,f=0; here.x=1; here.y=1; m[1][1]=1; while(ant<n*n) { next.x=here.x+dt[f].x; next.y=here.y+dt[f].y; if(m[next.x][next.y]==0) { m[next.x][next.y]=++ant; here=next; } else { f=(f+1)%4; } } } int main() { int n; cin>>n; Init(n); //print(n); solve(n); print(n); return 0; }