以下是一个使用BFS算法解决准备兔子逃生问题的代码示例:
from collections import deque
def rabbit_escape(matrix):
if not matrix: # 矩阵为空,直接返回0
return 0
n, m = len(matrix), len(matrix[0]) # 矩阵的行数和列数
# 定义四个方向的行列偏移量
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
queue = deque()
queue.append((0, 0, 0)) # 将起点加入队列
visited = set()
visited.add((0, 0)) # 将起点标记为已访问
while queue:
x, y, steps = queue.popleft()
if matrix[x][y] == 9: # 找到终点
return steps
for i in range(4): # 遍历四个方向
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and matrix[nx][ny] != 1 and (nx, ny) not in visited:
queue.append((nx, ny, steps+1)) # 将下一个位置加入队列
visited.add((nx, ny)) # 标记为已访问
return -1 # 若无法找到终点,返回-1
# 测试代码
matrix = [
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 1, 0],
[1, 1, 9, 0, 0]
]
print(rabbit_escape(matrix)) # 输出3,最少需要3步才能到达终点
在上述代码中,使用了一个队列来实现BFS算法。首先将起点加入队列,并将起点标记为已访问。然后通过循环来遍历队列中的元素,每次取出一个位置,判断是否为终点,若是则返回步数。接着遍历四个方向的相邻位置,判断是否可达,若可达则将其加入队列,并标记为已访问。最后若无法找到终点,则返回-1。
上一篇:BFS只能搜索最短路径
下一篇:BFS最短路径引理22.3