756.蛇形矩阵

#题目:输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
#输入:
    #3 3
#输出:
    # 1 2 3
    # 8 9 4
    # 7 6 5

n, m = map(int, input().strip().split())

# 以垂直向下为x轴正方向,水平向右为y轴正方向,(dx,dy)组成偏移量,每次改变相当于向右转90度
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
x, y, d = 0, 0, 0
res = [[0 for j in range(m)]  for i in range(n)]

for k in range(1, (m*n)+1):
    res[x][y]=k
    a = x + dx[d]
    b = y + dy[d]
    if (a < 0 or a >= n or b < 0 or b >= m or res[a][b]): #走到头(res[a][b]表示该点已经走过了,前面4种情况表示越界)
        d = (d + 1) % 4 #改变方向
        a = x + dx[d]
        b = y + dy[d]
    x = a
    y = b
# 打印出矩阵
for i in range(n):
    strs = ''
    for j in range(m):
        strs += str(res[i][j]) + ' '
    print(strs)

 posted on 2020-11-17 11:02  chen_coder  阅读(253)  评论(0)    收藏  举报