756. 蛇形矩阵

规定一个方向\(dir\),满足条件就一直向一个方向搜,不满足则换方向。

偏移数组默认方向优先级为:

const int N=110;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int a[N][N];
bool vis[N][N];
int n,m;
int cnt;

bool check(int x,int y)
{
    return x>=0 && x<n && y>=0 && y<m;
}

void dfs(int x,int y,int dir)
{
    a[x][y]=++cnt;
    vis[x][y]=true;


    int a=x+dx[dir],b=y+dy[dir];
    if(!check(a,b) || vis[a][b])
        dir=(dir+1)%4;
    a=x+dx[dir],b=y+dy[dir];
    if(check(a,b) && !vis[a][b])
        dfs(a,b,dir);
}

int main()
{
    cin>>n>>m;

    dfs(0,0,0);

    for(int i=0;i<n;i++,cout<<endl)
        for(int j=0;j<m;j++)
            cout<<a[i][j]<<' ';
    //system("pause");
    return 0;
}
posted @ 2021-01-19 11:18  Dazzling!  阅读(74)  评论(0编辑  收藏  举报