Dijkstra算法(原理及python,c++实现)
2021-02-12 14:19
标签:初始 uil ESS 最小花费 tar 结束 app png 起点 原理及python实现 graph:保存图,类似邻接表 costs:保存从起点到某点的最小花费 parents:保存节点的父节点 processed:用于保存已经处理过的点 c++实现 Dijkstra算法(原理及python,c++实现) 标签:初始 uil ESS 最小花费 tar 结束 app png 起点 原文地址:https://www.cnblogs.com/fanyu1/p/12730967.htmlgraph={}
graph["start"]={}
graph["start"]["a"]=6
graph["start"]["b"]=2
graph["b"]={}
graph["b"]["a"]=3
graph["b"]["fin"]=5
graph["a"]={}
graph["a"]["fin"]=1
graph["fin"]={}
infinity=float("inf")
costs={}
costs["a"]=6
costs["b"]=2
costs["fin"]=infinity
parents={}
parents["a"]="start"
parents["b"]="start"
parents["fin"]=None
processed=[]
def find_lowest_cost_node(costs):#找出还未处理过的花费最小的点
lowest_cost=float("inf")
lowest_cost_node=None
for node in costs:
cost = costs[node]
if cost and node not in processed:
lowest_cost=cost
lowest_cost_node=node
return lowest_cost_node
node=find_lowest_cost_node(costs)
while node is not None:#这个while循环在所有节点都被处理过后结束
cost=costs[node]
neighbors=graph[node]
for n in neighbors.keys():#遍历当前节点的所有邻居
new_cost=cost+neighbors[n]
if costs[n]>new_cost:#如果进过当前节点前往该邻居更近
costs[n]=new_cost#就更新该邻居的开销
parents[n]=node#并将该邻居的父节点设置为当前节点
processed.append(node)#将当前节点标记为处理过
node=find_lowest_cost_node(costs)#找出接下来要处理的节点,并循环
print(costs[‘fin‘])
#include
上一篇:Javascript编程技巧
下一篇:Java 学习阶段性感想
文章标题:Dijkstra算法(原理及python,c++实现)
文章链接:http://soscw.com/index.php/essay/54477.html