学习材料
《算法图解》第7章
适用情景
找出从一个节点到另一个节点的最短(快)路径
准备工作
对一个带权图进行描述,可使用两个散列表(字典),其中一个散列表用来描述每个结点的指向及权值,对于一个节点指向两个及以上的节点的情况,可使字典嵌套;另一个散列表用来描述从“起点”开始到其他节点的距离,若起点未与某个节点直接相连,在初始时把这段距离置为无穷大。
举例:图及其对应散列表如下

graph={}
graph["start"]={}
graph["start"]["A"]=5
graph["start"]["B"]=2
graph["A"]={}
graph["A"]["C"]=4
graph["A"]["D"]=2
graph["B"]={}
graph["B"]["A"]=8
graph["B"]["D"]=7
graph["C"]={}
graph["C"]["fin"]=3
graph["C"]["D"]=6
graph["D"]={}
graph["D"]["fin"]=1
graph["fin"]={}
costs={}
costs["A"]=5
costs["B"]=2
costs["C"]=float('inf')
costs["D"]=float('inf')
costs["fin"]=float('inf')
为了记录最短路径,还需要一个散列表描述最短路径中的父子关系。
paren

本文介绍了使用Python实现狄克斯特拉算法来找到图中从一个节点到另一个节点的最短路径。详细阐述了算法流程,并通过示例说明了如何准备数据结构,包括两个散列表来描述节点连接和距离。还提到了算法的限制,如不适用于负权值图和有环图,并推荐了在这些情况下的替代算法。
最低0.47元/天 解锁文章
2002





