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;
}