主要方法:首先要弄明白Z字形扫描的规则,斜向上扫描后,要先判断是否可以右移,如果可以右移就右移;如果不可以右移,就要下移。之后再斜向下扫描。斜向下扫描后,要先判断是否可以下移,如果可以下移就下移;如果不可以下移,就右移。之后再斜向上扫描。当坐标不是最后一个坐标,就一直执行上述步骤。
程序主要思路:构造两个函数,一个用于斜向上扫描输出数据,一个用于斜向下扫描输出数据,均返回最后一个数的坐标。当坐标不是列表中最后的那个数时,就一直循环上述步骤。
注意:斜向上的扫描:从给定坐标开始,如果坐标没有到达第一行或者最后一列时,就横坐标减1,纵坐标加1。斜向下的扫描:从给定坐标开始,如果坐标没有到达第一列或者最后一行时,就横坐标加1,纵坐标减1。
n=int(input())
l=[] #存放数据
for i in range(n):
l.append(list(map(int,input().split())))
#print(l)
def Xiexiayi(i,j,l): #斜向下移动输出的数据,返回最后一个坐标
print(l[i][j],end=" ")
while(i!=n-1 and j!=0): #循环直到到达第一列或者最后一行
i+=1
j-=1
print(l[i][j],end=" ")
return [i,j] #返回循环到底的最后一个坐标,作为下一步移动的坐标点
def Xieshangyi(i,j,l): #斜向上移动输出的数据,返回最后一个坐标
print(l[i][j],end=" ")
while (i != 0 and j != n-1): #循环直到到达第一行或者最后一列
i-=1
j+=1
print(l[i][j], end=" ")
return [i, j] #返回循环到底的最后一个坐标,作为下一步移动的坐标点
i=0
j=0
print(l[i][j],end=" ") #输出第一个数
#从第一个点开始:先判断是否可以右移,可以右移就右移,之后斜向下移动;如果不可以右移就下移,之后斜向下移动;
#之后判断是否可以下移,如果可以下移就下移,之后斜向上移动;如果不可以下移就右移,之后斜向上移动
while(i!=n-1 or j!=n-1): #循环直到达到最后的那个点
if(j==n-1): #无法右移的话就下移
i+=1
else:
j+=1
[i,j]=Xiexiayi(i, j, l) #斜下移
if((i==n-1)): #无法下移就右移
j+=1
else:
i+=1
[i, j] = Xieshangyi(i, j, l) #斜上移
```![结果.png](https://upload-images.jianshu.io/upload_images/21235383-7fd6680d5ad08d0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)