AcWing 3208. Z字形扫描
原题链接
简单
作者:
ywt51
,
2021-02-16 18:30:36
,
所有人可见
,
阅读 231
样例
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[510][510];
int n;
cin >> n;
for(int i = 1; i <= n; i ++ )
for(int j = 1; j <= n; j ++) cin >> a[i][j];
int dr[][2] = {{0,1}, {1,-1}, {1,0}, {-1, 1}};//定义出四个方向,偏移量
int col=1, row=1, d = 0;//d用来表示当前方向
cout << a[row][col] << ' ';
while(!(row == n && col == n)){
row += dr[d][0];
col += dr[d][1];//计算出位置
cout << a[row][col] << ' ';
if(d==0 && row == 1) d = 1;//根据当前方向和位置决定下一个方向和位置
else if(d==0 && row == n) d = 3;
else if(d==2 && col == 1) d = 3;
else if(d==2 && col == n) d = 1;
else if(d==1 && row == n) d = 0;//右下移动,需先判断是否到最后一行,这种情况要向右
else if(d==1 && col != 1) d = 1;
else if(d==1 && col == 1) d = 2;
else if(d==3 && col == n) d = 2;//左上移动,需先判断是否到最后一列,这种情况要向下
else if(d==3 && row != 1) d = 3;
else if(d==3 && row == 1) d = 0;
}
return 0;