dijkstra迪杰斯特算法邻接表加二叉堆实现python版

阅读: 评论:0

dijkstra迪杰斯特算法邻接表加二叉堆实现python版

dijkstra迪杰斯特算法邻接表加二叉堆实现python版

dijkstra迪杰斯特算法

需要知道的点:
1、属于贪心算法
2、得到一点到其他各点的所有距离
3、需要用到所有的信息
4、图中不能有负数权重

dijkstra算法过程

今天不是铅笔加手写










python+优先队列实现(这里用的二叉堆)

def showGraph(linkList):for vert in linkList:for n Neighbor():print("%s---邻接---%s--权重:%s"%(Value(),WightTo(n)))
class vertix:def __init__(self,v):self.value&#ighbor={}self.D=float("inf")def getValue(self):return  self.valuedef getNeighbor(self):ighbor.keys()def addNeighbor(self,v,w):ighbor[v]=wdef getWightTo(self,v):ighbor[v]def getD(self):return self.Ddef setD(self,newD):self.D=newDimport heapq
class dijkstra:def __init__(self,gragh):agh=graghdef getMinPath(self,start):for i,node in agh):node.setD(2**32+agh[start].setD(0)#创建二叉堆mydata=[[D(),Value()] for node agh]heapq.heapify(mydata)#优先队列中以D为键建立优先级while mydata:key,thisIndex=heapq.heappop(mydata)thisNode&#agh[thisIndex]for neibor agh[thisIndex].getNeighbor():agh[neibor].setD(agh[neibor].getD(),D()&#WightTo(neibor)))tempData=[]for node in mydata:tempVer&#agh[node[1]]heapq.heappush(tempData,[D(),Value()])mydata=tempDatares=[]for ver agh:res.D())return resif __name__ == '__main__':    inputData=[[(1,12),(5,16),(6,14)],[(0,12),(2,10),(5,7)],[(1,10),(3,3),(4,5),(5,6)],[(2,3),(4,4)],[(2,5),(3,4),(5,2),(6,8)],[(0,16),(1,7),(2,6),(4,2),(6,9)],[(0,14),(4,8),(5,9)]] #构造邻接表linkList=[]for i in range(len(inputData)):thisVerix=vertix(i)for v,w in inputData[i]:thisVerix.addNeighbor(v,w)linkList.append(thisVerix)showGraph(linkList)myDijstrs=dijkstra(linkList)print("最终结果------->")MinPath(0))

运行结果

0---邻接---1--权重:12
0---邻接---5--权重:16
0---邻接---6--权重:14
1---邻接---0--权重:12
1---邻接---2--权重:10
1---邻接---5--权重:7
2---邻接---1--权重:10
2---邻接---3--权重:3
2---邻接---4--权重:5
2---邻接---5--权重:6
3---邻接---2--权重:3
3---邻接---4--权重:4
4---邻接---2--权重:5
4---邻接---3--权重:4
4---邻接---5--权重:2
4---邻接---6--权重:8
5---邻接---0--权重:16
5---邻接---1--权重:7
5---邻接---2--权重:6
5---邻接---4--权重:2
5---邻接---6--权重:9
6---邻接---0--权重:14
6---邻接---4--权重:8
6---邻接---5--权重:9
最终结果------->
[0, 12, 22, 22, 18, 16, 14]

本文发布于:2024-01-29 18:49:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652536617522.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23