acwing 756蛇形矩阵,好像很多面试题会考,学习一下
#include <iostream>
#include <algorithm>
//常量
const int N =100;
//存储,用于打印
int res[N][N];
//标记
bool st[N][N];
using namespace std;
int main(){
int n,m;
cin>>n>>m;
//偏移量
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
//起点
int x=0,y=0,d=0;
for(int i=1;i<=n*m;i++){
//下一次坐标
int nx=x+dx[d],ny=y+dy[d];
//边界/占用
if(nx<0||nx>=n||ny<0||ny>=m||st[nx][ny])
{
//换方向
d=(d+1)%4;
//下一次坐标
nx=x+dx[d],ny=y+dy[d];
}
res[x][y]=i;
st[x][y]=true;
//更新
x=nx,y=ny;
}
//dayin
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<res[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
