AcWing 3208. Z字形扫描(模拟法,易懂的while循环)
原题链接
简单
作者:
aac
,
2024-03-18 20:33:04
,
所有人可见
,
阅读 5
#include <bits/stdc++.h>
using namespace std;
const int N=510;
int mp[N][N];
signed main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&mp[i][j]);
}
}
int cnt=1,x=0,y=0;
printf("%d ",mp[0][0]);
while(cnt<n*n){
//右移
if(y+1<=n-1){
printf("%d ",mp[x][++y]);
cnt++;
}
//不满足右移条件则下移
else if(x+1<=n-1){
printf("%d ",mp[++x][y]);
cnt++;
}
//左下方
while(x+1<=n-1&&y-1>=0){
printf("%d ",mp[++x][--y]);
cnt++;
}
//下移
if(x+1<=n-1){
printf("%d ",mp[++x][y]);
cnt++;
}
//不满足下移条件则右移
else if(y+1<=n-1){
printf("%d ",mp[x][++y]);
cnt++;
}
//右上方
while(x-1>=0&&y+1<=n-1){
printf("%d ",mp[--x][++y]);
cnt++;
}
}
return 0;
}