1. 程式人生 > 其它 >思維題 Z字形掃描

思維題 Z字形掃描

#include <bits/stdc++.h>

using namespace std;
int a[200][200];
int n;
void scan(int lever,bool even)

{
int x,y;//確定起點座標
x = lever > n ? n : lever;
y = lever > n ? (lever - n + 1) : 1;
char c;//選擇輸出間隔符號
c = (x == n && y == n) ? '\n' : ' ';
int times;//限制每層遞減/遞增次數
times = lever >= n ? (n - (lever - n)) : lever;
if(even) swap(x,y);//偶數層時,交換x,y即可得到起點座標
for(int i = 0; i < times; i++)//每層對起點座標作用times次,然後輸出對應元素即可
printf("%d%c",even? a[x++][y--] : a[x--][y++],c);
return ;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin >> a[i][j];
for(int lever = 1; lever <= 2 * n - 1; lever++)//迴圈層數
scan(lever,lever % 2 == 0);
return 0;
}