【Python】BFS广度优先搜索解决权值相同的最短路径问题

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(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值