【题解】Z字型扫描
题面
前言
好理解的题面+好看的数据范围=恶心的码量
这种题怎么会整这么多分讨啊!
正文
把矩阵拆成左上角,右下角两个三角形分开模拟
每个三角形中,分类讨论奇数斜行与偶数斜行不同的方向
注意奇数阶矩阵与偶数阶矩阵不同即可
代码
#include<iostream>
using namespace std;
const int maxn=512;
int a[maxn][maxn];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
int x=0,y=0;
for(int i=0;i<n;i++){
if(i&1){
for(int j=0;j<i;j++){
cout<<a[x++][y--]<<' ';
}
cout<<a[x++][y]<<' ';
}else{
for(int j=0;j<i;j++){
cout<<a[x--][y++]<<' ';
}
cout<<a[x][y++]<<' ';
}
}
if(n&1){
y--;
x++;
}else{
y++;
x--;
}
for(int i=n-2;i>0;i--){
if(i&1){
for(int j=0;j<i;j++){
cout<<a[x++][y--]<<' ';
}
cout<<a[x][y++]<<' ';
}else{
for(int j=0;j<i;j++){
cout<<a[x--][y++]<<' ';
}
cout<<a[x++][y]<<' ';
}
}
if(n!=1){
cout<<a[n-1][n-1]<<endl;
}
return 0;
}
后记
下班力!
完结撒花!