题目描述
牛客: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)