题解 | #迷宫问题#
迷宫问题
http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
def find (hang,lie,maze,road):
b = road
b.append('(' + str(hang) + ',' + str(lie) + ')') #当前的位置加入路径
if(hang == len(maze) - 1) & (lie == len(maze[0]) - 1): #如果到达出口,输出所经历的路径,但递归没有停止,但是题目只要求输出路径,
之后递归还会运行,但不影响题目的完成了
for i in b:
print(i)
return True
if(lie- 1 >= 0): #如果能向左走
if(c[hang][lie - 1] == '0'): #如果左边没被探索过
c[hang][lie] = '1' #标记已经探索过了,为了避免向回走,回到原来的位置的情况只有上下左右都探索过发现走不通回到原来的位置,不能自己回来
find(hang,lie-1,maze,b) #向左走
if(lie + 1 <= len(maze[0]) - 1): #右
if(c[hang][lie + 1] == '0'):
c[hang][lie] = '1'
find(hang,lie+1,maze,b)
if(hang - 1 >= 0): #上
if(c[hang - 1][lie] == '0'):
c[hang][lie] = '1'
find(hang - 1,lie,maze,b)
if(hang + 1 <= len(maze) - 1 ): #下
if(c[hang + 1][lie] == '0'):
c[hang][lie] = '1'
find(hang + 1,lie,maze,b)
b.remove(b[-1]) #上下左右全被探索过,没有找到出口,将这个位置从路径中抹去,路径只保存能到达最终位置的路径
while True:
try:
a = input()
a = a.split()
row = int(a[0]) #迷宫的行数
List = int(a[1]) #迷宫的列数
maze = []
for i in range(row):
b = input()
b = b.split()
maze.append(b) #迷宫的矩阵
road = []
i = 1
c = maze
find(0,0,maze,road) #寻找出口
except:
break
华为机试题解(prod.by kedao) 文章被收录于专栏
华为实习机试题解