# Dijkstra.狄杰斯特拉
import heapq
import math def init_distance(graph, s):
distance = {s: 0}
for vertex in graph:
if vertex != s:
distance[vertex] = math.inf
return distance def dijkstra(graph, s):
pqueue = []
heapq.heappush(pqueue, (0, s))
seen = set()
parent = {s: None}
distance = init_distance(graph, s) while len(pqueue) > 0:
pair = heapq.heappop(pqueue)
dist = pair[0]
vertex = pair[1]
seen.add(s)
nodes = graph[vertex].keys()
for w in nodes:
if w not in seen:
if dist + graph[vertex][w] < distance[w]:
heapq.heappush(pqueue, (dist + graph[vertex][w], w))
parent[w] = vertex
distance[w] = dist + graph[vertex][w]
return parent, distance if __name__ == '__main__':
graph_dict = {
"A": {"B": 5, "C": 1},
"B": {"A": 5, "C": 2, "D": 1},
"C": {"A": 1, "B": 2, "D": 4, "E": 8},
"D": {"B": 1, "C": 4, "E": 3, "F": 6},
"E": {"C": 8, "D": 3},
"F": {"D": 6},
} parent_dict, distance_dict = dijkstra(graph_dict, "A")
print(parent_dict)
print(distance_dict)

最新文章

  1. ubuntu下postgreSQL安装配置
  2. PagerTabStrip及自定义的PagerTab
  3. Charles 3.11.5 绿色特别版
  4. 使用 JSONP 实现跨域通信
  5. Fedora21源配置与显卡安装
  6. Android manifest
  7. SLC、eSLC、MLC、eMLC的区别
  8. HDU 4557 非诚勿扰 队列、(记一次失败的SBT尝试)
  9. TCP常见的定时器三次握手与四次挥手
  10. xml基本语法(2)
  11. log4j到log4j2升级迁移方案
  12. 【BZOJ4589】Hard Nim(FWT)
  13. RHEL5.8安装
  14. [macOS] macOS下,VirtualBox安装CentOS7.4, 搭建nginx, mysql, PHP5.6&amp;PHP7.1
  15. MYSQL基础知识小盲区
  16. mysql杂谈
  17. mysql事务四大特性
  18. IDFA
  19. Codeforces Round #234 (Div. 2) :A. Inna and Choose Options
  20. selinux操作

热门文章

  1. StoneTab标签页CAD插件 3.2.5
  2. vi学习笔记
  3. C语言——指针总结
  4. java中的多态总结
  5. vue项目js实现图片放大镜功能
  6. PHP中RabbitMQ之phpAmqplib实现(五
  7. C#验证控件使用方法及常用正则表达式例析(转)
  8. Image Processing and Analysis_8_Edge Detection:Scale-space and edge detection using anisotropic diffusion——1990
  9. 【异常】诡异的mysql错误,Pagehelper插件混乱导致吗
  10. HTML5学习:表格