AcWing 756. 蛇形矩阵
原题链接
简单
作者:
Mr.luo
,
2023-10-29 18:07:50
,
所有人可见
,
阅读 49
听好多讲解之后还是似懂非懂的感觉,有空再用其他的法子试试
#include<iostream>
using namespace std;
const int n=101;
int res[n][n];//定义全局变量
int main(){
int n,m;
cin>>n>>m;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};//定义X与Y坐标的偏移量(0,1)(0,-1)(1,0)(-1,0)
for(int x=0,y=0,d=0,k=1;k<=n*m;k++)
{
res[x][y]=k;//填充数组
int a=x+dx[d],b=y+dy[d];//偏移之后的新坐标
if(a<0 or a>=n or b<0 or b>=m or res[a][b]){//两种情况:当x,y坐标出界或者遇到重复,则进行转向
d=(d+1)%4;//实现转向的技巧,右下左上对应着0,1,2,3,这一步对d取余
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;//进行下一圈的循环
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<res[i][j]<<" ";
}
cout<<endl;
}
return 0;
}