python走迷宫dfs
时间: 2025-01-04 11:32:06 浏览: 9
### Python 实现迷宫深度优先搜索 (DFS)
为了实现迷宫中的深度优先搜索,可以采用栈结构或递归方法。下面展示的是使用递归来遍历迷宫并寻找出路的方法。
#### 定义迷宫
首先定义一个二维列表表示迷宫,其中 `0` 表示可通过的空间而 `1` 则代表墙壁不可通过:
```python
maze = [
[1, 1, 1, 1, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 1]
]
start_position = (1, 1)
end_position = (3, 3)
```
#### DFS 函数设计
接下来创建一个名为 `dfs` 的函数用于执行实际的搜索操作。此函数接收当前坐标作为参数,并返回布尔值指示是否找到了出口路径[^1]。
```python
def dfs(maze, start, end):
stack = [(start[0], start[1])]
while stack:
pos = stack.pop()
if pos == end:
return True
for direction in [(0,-1), (-1,0), (0,1), (1,0)]:
next_pos = (pos[0]+direction[0], pos[1]+direction[1])
if is_valid_move(maze, next_pos):
maze[next_pos[0]][next_pos[1]] = -1 # Mark as visited
stack.append(next_pos)
return False
def is_valid_move(maze, position):
row, col = position
rows, cols = len(maze), len(maze[0])
if not(0 <= row < rows and 0 <= col < cols):
return False
value_at_pos = maze[row][col]
if value_at_pos != 0:
return False
return True
```
这段代码实现了基本的功能框架,但是还需要一些辅助功能来标记访问过的节点以及判断移动的有效性。这里假设起点和终点都是开放区域(`0`)并且不会位于边界处。
#### 可视化解决方案
一旦完成了上述逻辑部分的工作之后就可以考虑如何直观地显示最终的结果了。一种简单的方式就是再次打印整个迷宫数组,在已经走过的路上留下特殊的标志字符以便区分未探索过的地方和其他状态的位置[^2]。
```python
for i in range(len(maze)):
for j in range(len(maze[i])):
if maze[i][j]==-1:
print('X', end=' ') # Visited path marker
elif maze[i][j]==0 or maze[i][j]==1:
print({0:' ', 1:'#'}[maze[i][j]], end=' ')
print()
if dfs(maze, start_position, end_position):
print("\nPath found!")
else:
print("\nNo Path Found.")
```
以上就是一个完整的Python程序用来模拟迷宫内的深度优先搜索过程。当然这只是一个基础版本,对于更复杂的场景可能需要进一步调整算法细节或是引入额外的数据结构支持。
阅读全文