螺旋数组
最近看的一本数据结构书里,在数组与广义表部分中间展示了一道螺旋数组题。初见这道题时是在我刚学完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;
}