螺旋数组

螺旋数组

最近看的一本数据结构书里,在数组与广义表部分中间展示了一道螺旋数组题。初见这道题时是在我刚学完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;
}
posted @ 2020-10-15 19:13  anyiya  阅读(324)  评论(0编辑  收藏  举报