0
点赞
收藏
分享

微信扫一扫

牛客HJ43 迷宫问题中使用python,append在递归调用时的问题

龙驹书房 03-26 12:00 阅读 2

题目描述

牛客:HJ43 迷宫问题
定义一个二维数组 N*M ,如 5 × 5 数组下所示:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。

输入描述:
输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

输出描述:
左上角到右下角的最短路径,格式如样例所示。

解题

line = input().split(" ")
row = int(line[0])
column = int(line[1])
metrix = []
for i in range(row):
    line1 = input()
    metrix.append(list(map(int, line1.split(" "))))


def walk(i, j, pos=[(0, 0)]):
    if j + 1 < column and metrix[i][j + 1] == 0:
        if (i, j + 1) not in pos:
            walk(i, j + 1, pos + [(i, j + 1)])    
            # pos.append((i, j + 1))  不能写成append的原因是 pos.append((i, j + 1))无返回值  返回值为None
            #  pos + [(i, j + 1)] 会返回添加新元素后的列表
#             >>> a = [1]
#             >>> print(a.append(2))
#                 None
#             >>> a.append(2)
#             >>> a
#                 [1, 2, 2]
#             >>> print(a+[3])
#                 [1, 2, 2, 3]
    if j - 1 >= 0 and metrix[i][j - 1] == 0:
        if (i, j - 1) not in pos:
            walk(i, j - 1, pos + [(i, j - 1)])
    if i - 1 >= 0 and metrix[i - 1][j] == 0:
        if (i - 1, j) not in pos:
            walk(i - 1, j, pos + [(i - 1, j)])
    if i + 1 < row and metrix[i + 1][j] == 0:
        if (i + 1, j) not in pos:
            walk(i + 1, j, pos + [(i + 1, j)])
    if (i, j) == (row - 1, column - 1):
        for p in pos:
            print("(" + str(p[0]) + "," + str(p[1]) + ")")


walk(0, 0)
举报

相关推荐

0 条评论