python无向图最短路径_Dijkstra算法python的实现(有向图/无向图)

我用Dijkstra算法,写了一个无环有向图/无向图(多加一条相反的路径仅此而已) 的最短路径问题的解决方案。如果是无向图也很简单,把每个无向的edge拆开成两个有向的就可以解决了。

为了每次弹出正确的端点,我也实现了一个最小优先队列。

代码由4个类构成:

Edge定义两个端点之间路径,有三个属性:源,目的地和权重。

Graph定义了整个图形,包括路径和端点。在这个code里面,端点不能单独添加。当添加路径的时候,端点会自动添加。

MinPQ定义一个优先队列,它用来储存端点到起始点的最小距离。它有一个方法del_min,用来弹出队列中距离最小的那个端点。

ShortestPath是主要类,它使用Dijkstra算法,有两个方法:

path_to(vertex)方法返回包含从起点到顶点的最短路径的list 。

main(list_Grph,from_point,to_point) //该方法主要构造 并且输出最短路径经过的节点

list_Grph 使所有边的一个list 下面有例子可以看看

from_point //从哪一个节点出发

to_point //到哪个节点

dist_to(vertex)返回path_to(vertex)的总长度。

class Edge:

def __init__(self, source, destine, weight):

self.weight = weight

self.source = source

self.destine = destine

class Graph:

def __init__(s

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值