借助楼上的思路,先找到规律,发现有四种运动方向, 向右、向左下、向下、向右上,
我们可以认为只有两个主要方向,
分别是左下和右上, 左下遇到边界时,可能向下或向右运动一格后改变方向,方向变为右上。 先默认一开始方向是右上,但是遇到边界,回退之后向右运动一格,之后改变方向,变为左下运动,以此类推关键是设置改变方向时的控制条件 n = int(input())
#构建一个n*n的列表
matrix_ls = [[0 for _ in range(n)] for _ in range(n)]
num = 0
x,y = 0,0
#状态控制
state = 0
direction_1 = [[-1,1],[1,-1]]
#-1 1 右上
#1 -1 左下
direction_2 = [[0,1],[1,0]]
#0 1 向右
#1 0 向下
for i in range(n**2):
    num += 1
    matrix_ls[x][y] = num #将num值符给对应索引位置
    x += direction_1[state%2][0]
    y += direction_1[state%2][1]
    #先向右上移动,如果到边界,就回退
    if (state%2 == 0) and (x < 0 or y == n):
        #回退
        x -= direction_1[state%2][0]
        y -= direction_1[state%2][1]
        #向右移动一格后的位置
        x += direction_2[0][0]
        y += direction_2[0][1]
        state += 1
        #如果向右移动超出了边界,就回退向下移动一格
        if y == n:
            #回退
            x -= direction_2[0][0]
            y -= direction_2[0][1]
            #向下移动一格
            x += direction_2[1][0]
            y += direction_2[1][1]
    #改变方向后,向左下移动,如果到边界,就回退
    if (state%2 == 1) and (y < 0 or x == n):
        #回退
        x -= direction_1[state%2][0]
        y -= direction_1[state%2][1]
        #向下移动一格
        x += direction_2[1][0]
        y += direction_2[1][1]
        state += 1
        #如果向下移动超出了边界,就回退向右移动一格
        if x == n:
            #回退
            x -= direction_2[1][0]
            y -= direction_2[1][1]
            #向右移动一格
            x += direction_2[0][0]
            y += direction_2[0][1]
#遍历
for i in matrix_ls:
    for j in i:
        print(j,end=' ')
    print()