<强> Dijkstra算法算法强>
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法
示例:
<强>算法强>
算法实现流程思路:
迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。
”“” 输入 图输入的图 src原点 返回 说记录源点到其他点的最短距离 路径路径 ”“” 进口json def dijkstra算法(图,src): 如果图==没有: 回来没有 #定点集合 节点=[我的范围(len(图)】#获取顶点列的表,用邻接矩阵存储图 #顶点是否被访问 访问=[] visited.append (src) #初始化说 说={src: 0} #源点到自身的距离为0 因为我在节点: 说[我]=图(src)[我] 路径={src: {src:[]}} #记录源节点到每个节点的路径 k==src 当节点: temp_k=k mid_distance=浮动(正)#设置中间距离无穷大 v的访问: d的节点: 如果图(src) [v] !=浮动(“正”)和图[v] [d] !=浮动(正):#有边 new_distance图=图(src) [v] + [v] [d] 如果new_distance & lt;=mid_distance: mid_distance=new_distance 图(src) [d]=new_distance #进行距离更新 k=d pre=v 如果k !=src和temp_k==k: 打破 说[k]=mid_distance #最短路径 路径(src) [k]=[我的路径(src) [pre]] 路径(src) [k] .append (k) visited.append (k) nodes.remove (k) 打印(节点) 还说,路径 if __name__==癬_main__”: #输入的有向图,有边存储的就是边的权值,无边就是浮动(正)、顶点到自身就是0 图=[ [0,浮子(正),10,浮子(正),30岁,100年), [浮动(正)0 5,浮子(正)、浮动(正)、浮动(正)], 浮动(正)、浮点数(正),0,50岁的浮动(正)、浮动(正)], 浮动(正)、浮点数(正)、浮动(正),0,浮子(正),10], 浮动(正)、浮点数(正)、浮动(正),20日0时,60), 浮动(正)、浮点数(正)、浮动(正)、浮动(正)、浮动(正),0]] 说,路径=dijkstra算法(图,0)#查找从源点0开始带其他节点的最短路径 打印(dis) 打印(json。转储(路径,缩进=4)) >之前<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
Python实现Dijkstra算法算法