BFS广度优先搜索 示例:
给定如图所示的无向连通图,假定图中所有边的权值都为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径
算法分析
权值相同的最短路径问题,则单源点 Dijkstra 算法退化成 BFS 广度优先搜索,假定起点为 0,终点为 N:
结点步数 step[0…N-1] 初始化为 0
若从当前结点 i 扩展到邻接点 j 时:
若 step[ j ] 为 0,则
step[ j ] = step[ i ] + 1,到结点 j 的路径就 = 到结点 i 的路径 + 结点 j
若 step[ j ] == step[ i ] + 1,则
到结点j的路径就 = 到结点 j 的路径就 + ( 到结点 i 的路径 + 结点 j )
可考虑一旦扩展到结点N,则提前终止算法
Python代码如下:
import numpy as np
from copy import deepcopy
# 获取到各个结点的最短线路
def get_path(g):
n = len(g)
step = [0 for i in range(n)] # 每个结点第几步可以到达
step_path = [[] for i in range(n)] # 到每个结点的走法
step_path[0] = [[0]] # 到结点0有1种走法
q = [0] # 当前搜索的结点
while len(q) > 0:
f = q.pop() # f就是from的结点
s = step[f] + 1
for i in range(