扫描的位置变化分为三种:1.边界处,2.左下,3.右上;
编码时先处理边界处的情况,在处理斜线方向;
注意n==1的情况
#include <iostream>
#include <math.h>#include<algorithm>
#include<iostream>
#include<cstring>
#include <cstdio>
using namespace std;
int a[510][510];
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;
bool xy = true;
if(n==1){
cout<<a[0][0];
return 0;
}
else
cout<<a[x][y]<<" ";
while(true){
if(x==0){
if(y==n-1){
x++;
}
else {
y++;
}
}
else if(y==0){
if(x==n-1){
y++;
}
else {
x++;
}
}
else if(x==n-1){
y++;
}
else if(y==n-1){
x++;
}
if(x==n-1&&y==n-1){
cout<<a[x][y]<<" ";
break;
}
cout<<a[x][y]<<" ";
if(xy){
while(y>0&&x<n-1){
x++;
y--;
cout<<a[x][y]<<" ";
}
xy=false;
}
else {
while(x>0&&y<n-1){
x--;
y++;
cout<<a[x][y]<<" ";
}
xy=true;
}
}
return 0;
}