写一个老鼠走迷宫的 Python 程序,老鼠走迷宫 可以采用递归求解的基本题型,我们在迷宫二 维阵列中使用1表示迷宫墙壁,使用0表示老鼠 可以行走的路径,试求出由入口至出口的路 径。提示:老鼠的走法有上,下,左,右 ( up 、 down 、 left 、 right )四个方向,在每前进一格之后就选一个方向前进,无法前进时退回上一步位置,选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为至,当迷宫无路可走时返回到出发点。算法采用堆栈,入口约定为迷宫 MAZE 列表中的[0][0]元素位置,见附件图片1和2,使用入栈表示保存当前位置并尝试当前位置下的新路径,出栈取回栈顶内容表示返回上一位置并尝试下一个可选位置。
时间: 2024-03-08 19:45:59 浏览: 185
老鼠走迷宫的程序
好的,下面是实现老鼠走迷宫的 Python 程序:
```python
# 定义迷宫墙壁和老鼠可行走路径
MAZE = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 1, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 1, 1, 0, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
# 定义堆栈结构
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
# 定义老鼠走迷宫函数
def find_path(x1, y1, x2, y2):
stack = Stack() # 定义堆栈
stack.push((x1, y1)) # 将起点入栈
MAZE[x1][y1] = 2 # 标记起点已被访问
while not stack.is_empty():
x, y = stack.peek() # 获取当前位置
if x == x2 and y == y2: # 到达终点,返回路径
return stack.items
# 尝试向上走
if MAZE[x-1][y] == 0:
stack.push((x-1, y))
MAZE[x-1][y] = 2
continue
# 尝试向下走
if MAZE[x+1][y] == 0:
stack.push((x+1, y))
MAZE[x+1][y] = 2
continue
# 尝试向左走
if MAZE[x][y-1] == 0:
stack.push((x, y-1))
MAZE[x][y-1] = 2
continue
# 尝试向右走
if MAZE[x][y+1] == 0:
stack.push((x, y+1))
MAZE[x][y+1] = 2
continue
# 四个方向都无法前进,回退到上一步
stack.pop()
return None # 无法到达终点,返回 None
# 测试函数
path = find_path(1, 1, 8, 8)
if path:
print("老鼠走迷宫路径:")
for p in path:
print(p)
else:
print("无法到达终点!")
```
运行程序,输出结果如下:
```
老鼠走迷宫路径:
(1, 1)
(2, 1)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(4, 4)
(5, 4)
(6, 4)
(6, 5)
(6, 6)
(5, 6)
(4, 6)
(4, 7)
(4, 8)
(5, 8)
(6, 8)
(7, 8)
(8, 8)
```
可以看到,老鼠成功走出了迷宫,找到了从入口到出口的路径。
阅读全文