BFS和状态生成树
走迷宫的最短路径
问题: 给出一个起点和终点, 求起点走到终点的最短距离.
思路: 穷举所有可能, 按步数递增依次搜寻.
起点(0,0) 终点(4,4) 1为墙(不可走)
python code
from queue import Queue
M = [
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 1, 0],
]
V = [[False for j in range(5)] for i in range(5)]
dx = [-1, 1, 0, 0]
dy = [ 0, 0, -1, 1]
class Node:
def __init__(self, x, y, step):
self.x, self.y, self.step = x, y, step
def bfs(start_x, start_y):
que = Queue()
que.put(Node(start_x, start_y, 0))
while not que.empty():
node = que.get()
x, y, step = node.x, node.y, node.step
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
if nx<0 or ny<0 or nx>4 or ny>4:
continue
if V[nx][ny] or M[nx][ny]==1:
continue
if nx==4 and ny==4:
return step+1