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

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号