AcWing 756. 蛇形矩阵
原题链接
简单
作者:
AC不了一点
,
2024-12-11 02:24:36
,
所有人可见
,
阅读 2
// (0,1)->(1,0)->(0,-1)->(-1,0)
//
#include<bits/stdc++.h>
using namespace std;
const int N=102;
int res[N][N];
int n,m;
int main(){
//读入输入
cin>>n>>m;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
//循环填数
for(int i=0,j=0,k=1,d=0;k<=n*m;k++){
res[i][j]=k;
int x=i+dx[d],y=j+dy[d];//x,y才是下一步的坐标,而不是直接操作i,j,因为i,j要在循环里面保持不变
if(x<0||y<0||x>=n||y>=m||res[x][y]){//q1:这里坐标更新的时候,是要去判断下一步是否会越界
d=(d+1)%4;
x=i+dx[d],y=j+dy[d];
}
i=x,j=y;
}
//输出
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<res[i][j]<<" ";
}
cout<<endl;
}
}
总结:
1.判断是否出错,是判断下一步是否会出错,i,j表示的是当前的位置
2.下一步是否出错,所以只有在循环结束之后,才可以去确定下一次循环元素应该在的位置