码迷,mamicode.com
首页 > 编程语言 > 详细

狄克斯拉特算法。 适用于,加权有向无环图,且无负权边,的最短路径计算。

时间:2018-10-23 23:12:46      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:没事   app   就是   重复   end   turn   aaaaaa   节点   roc   

没事时看的一道题,解完后发现这居然是一个算法。

就在这里拷贝一份,免得后面自己都忘了自己原来写的是什么东西。

核心思路:

1、找到临近节点中路径最短的那一个。

2、更新从该节点去它临近节点的,到达临近节点所用的路径。(到新节点的路径比原路径短,才更新)

3、重复这个过程,直到对应的图中所有的节点都试过了。

4、计算最终路径。

 

def find_lowest_cost(costs,process):
lower_k = None
for cost_k in costs:
if cost_k not in process:
lower_k = cost_k
return lower_k
# 总字典,反正我是这么叫的
graps = dict()
graps[‘star‘] = {‘a‘:6,‘b‘:2}
graps[‘a‘] = {‘end‘:1}
graps[‘b‘] = {‘a‘:3,"end":5}
graps[‘end‘] = dict()
print(graps)
# 无穷大
infinity = float("inf")
# 父字典,开销字典
costs = dict()
costs[‘a‘] = 6
costs[‘b‘] = 2
costs[‘end‘] = infinity
print(costs)
parent = dict()
parent[‘a‘] = ‘star‘
parent[‘b‘] = ‘star‘
parent[‘end‘] = None
print(parent)
# 储存已经处理节点
process = []
print(‘华丽的分割线‘.center(50,‘-‘))
while 1:
lowest_k = find_lowest_cost(costs, process)
if lowest_k == None:
break
for k in graps[lowest_k]:
if graps[lowest_k][k] + costs[lowest_k] < costs[k]:
costs[k] = graps[lowest_k][k] + costs[lowest_k]
parent[k] = lowest_k
process.append(lowest_k)
print(‘costs: ‘, costs)
print(‘parent: ‘, parent)
print("procrss: ", process)

Aaaaaaa,我的代码就是这么难看。反正是给我自己看的。

狄克斯拉特算法。 适用于,加权有向无环图,且无负权边,的最短路径计算。

标签:没事   app   就是   重复   end   turn   aaaaaa   节点   roc   

原文地址:https://www.cnblogs.com/sbxlqswl/p/9839220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!