Python实现Dijkstra算法
2024-10-06 19:18:55
# 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)
最新文章
- ubuntu下postgreSQL安装配置
- PagerTabStrip及自定义的PagerTab
- Charles 3.11.5 绿色特别版
- 使用 JSONP 实现跨域通信
- Fedora21源配置与显卡安装
- Android manifest
- SLC、eSLC、MLC、eMLC的区别
- HDU 4557 非诚勿扰 队列、(记一次失败的SBT尝试)
- TCP常见的定时器三次握手与四次挥手
- xml基本语法(2)
- log4j到log4j2升级迁移方案
- 【BZOJ4589】Hard Nim(FWT)
- RHEL5.8安装
- [macOS] macOS下,VirtualBox安装CentOS7.4, 搭建nginx, mysql, PHP5.6&;PHP7.1
- MYSQL基础知识小盲区
- mysql杂谈
- mysql事务四大特性
- IDFA
- Codeforces Round #234 (Div. 2) :A. Inna and Choose Options
- selinux操作
热门文章
- StoneTab标签页CAD插件 3.2.5
- vi学习笔记
- C语言——指针总结
- java中的多态总结
- vue项目js实现图片放大镜功能
- PHP中RabbitMQ之phpAmqplib实现(五
- C#验证控件使用方法及常用正则表达式例析(转)
- Image Processing and Analysis_8_Edge Detection:Scale-space and edge detection using anisotropic diffusion——1990
- 【异常】诡异的mysql错误,Pagehelper插件混乱导致吗
- HTML5学习:表格