#include <iostream>
using namespace std;
#include <bits/stdc++.h>
int a[501][501];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>a[i][j];
}
int i=1,j=1;
int num = n*n;
num--;
cout<<a[i][j]<<' ';
j++;
int flag=0;
while(num--){
cout<<a[i][j]<<' ';
if(i == 1){
if(flag == 0){
i++;j--;
}
else
{
if(j == n)
{
i++;
}else
j++;flag = 1-flag;
}
}
else if(j == 1){
if(flag == 0){
if(i == n)
{
j++;
}else
i++;
flag = 1-flag;
}
else
{
i--;j++;
}
}
else if(i == n){
if(flag == 0){
j++;flag = 1-flag;
}
else
{
i--;j++;
}
}
else if(j == n){
if(flag == 0){
i++;j--;
}
else
{
i++;flag = 1-flag;
}
}
else
{
if(flag == 0){
i++;j--;
}
else
{
i--;j++;
}
}
}
return 0;
}
本题根据扫描方向只有两个方向,因此使用flag进行标记方向,而在触碰到边界时则需要进行进一步方向判断。