基于Python语言写在迷宫地图中寻找通路的编程及实现结果
题目:显示迷宫地图,寻找并打印找到的通路,采用字符显示迷宫地图和路径,□表示墙壁,■表示通路。
要求:1. 找出从A1到H10的路径,0表示通行,1表示不通;
2. 计算路径的步数;
3. 找出最短的路径。
迷宫地图:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
下面为使用深度优先搜索算法实现迷宫寻路代码:
def find_path(maze, start, end):
rows, cols = len(maze), len(maze[0])
visited = [[False] * cols for _ in range(rows)]
path = []
def dfs(row, col):
if row < 0 or row >= rows or col < 0 or col >= cols or maze[row][col] == 1 or visited[row][col]:
return False
visited[row][col] = True
path.append((row, col))
if (row, col) == end:
return True
if dfs(row - 1, col) or dfs(row + 1, col) or dfs(row, col - 1) or dfs(row, col + 1):
return True
path.pop()
return False
dfs(start[0], start[1])
return path
# 迷宫地图
maze = [
[0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 1, 1, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
]
start = (0, 0)
end = (9, 7)
path = find_path(maze, start, end)
# 显示迷宫地图和路径
for i in range(len(maze)):
for j in range(len(maze[0])):
if (i, j) == start:
print('A', end=' ')
elif (i, j) == end:
print('H', end=' ')
elif maze[i][j] == 1:
print('□', end=' ')
elif (i, j) in path:
print('■', end=' ')
else:
print(' ', end=' ')
print()
# 计算路径的步数
steps = len(path)
print(f"\n路径的步数为: {steps}")
# 找出最短的路径
shortest_path = find_path(maze, start, end)
if len(shortest_path) < steps:
print("找到最短路径:")
for i, (row, col) in enumerate(shortest_path):
if (row, col) == start:
print('A', end=' ')
elif (row, col) == end:
print('H', end=' ')
else:
print('■', end=' ')
if (i + 1) % 10 == 0:
print()
else:
print("没有更短的路径。")
这段代码会先根据迷宫地图找到从A1到H10的路径,并打印出迷宫地图和路径。然后计算路径的步数,并找出最短的路径(如果有更短的路径)。在打印迷宫地图时,□表示墙壁,■表示通路。
下面为迷宫寻路程序实现结果: