# Python 实现的深度优先搜索实现迷宫算法
lookup_path = [] history_path = [] # maze = [[0, 0, 1, 0, 1], [1, 0, 0, 0, 1], [0, 0, 1, 1, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 0]] maze = [[0, 1, 0, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 1, 0], [1, 1, 1, 0, 0], [0, 1, 0, 0, 1], [0, 1, 0, 0, 0]] # 打印二维数组 for k in maze: for v in k: print(v, end=" ") print("") print("\n") def up(location): # 到达了数组顶端 if location[0] == 0: return False else: new_location = [location[0] - 1, location[1]] # 走过的路不再走 if new_location in history_path: return False # 遇到墙不走 elif maze[new_location[0]][new_location[1]] == 1: return False else: lookup_path.append(new_location) history_path.append(new_location) return True def down(location): # 遇到迷宫最下方的时候,不能继续往下走 if location[0] == len(maze) - 1: # 6行5列的二维数组行数,从0开始计算所以是6-1=5 行 return False else: new_location = [location[0] + 1, location[1]] # 走过的路不再走 if new_location in history_path: return False # 遇到墙不走 elif maze[new_location[0]][new_location[1]] == 1: return False else: history_path.append(new_location) lookup_path.append(new_location) return True def left(location): # 遇到迷宫最左边,不能继续往左走 if location[1] == 0: return False else: new_location = [location[0], location[1] - 1] # 走过的路不再走 if new_location in history_path: return False # 遇到墙不走 elif maze[new_location[0]][new_location[1]] == 1: return False else: history_path.append(new_location) lookup_path.append(new_location) return True def right(location): # 遇到迷宫最右边,不能继续向右移动 if location[1] == len(maze[0]) - 1: # 6行5列的二维数组列数,从0开始计算所以是5-1=4行 return False else: new_location = [location[0], location[1] + 1] # 走过的路不再走 if new_location in history_path: return False # 遇到墙不走 elif maze[new_location[0]][new_location[1]] == 1: return False else: history_path.append(new_location) lookup_path.append(new_location) return True start = [0, 0] end = [5, 4] print("start: %s --> end: %s\n" % (start, end)) lookup_path.append(start) history_path.append(start) while lookup_path[-1] != end: now = lookup_path[-1] # print("retry:%s, Lookup path:%s" % (now, route_stack)) if up(now) or down(now) or left(now) or right(now): continue lookup_path.pop() print("final path: ", lookup_path)