迪杰斯特拉算法python代码实现
时间: 2024-09-19 21:06:12 浏览: 39
迪杰斯特拉(Dijkstra)算法是一种用于寻找图中最短路径的算法,它通常应用于有向或无向加权图中。以下是Python实现的一个基本版本:
```python
import heapq
def dijkstra(graph, start):
# 初始化距离字典和优先队列
distances = {node: float('infinity') for node in graph}
distances[start] = 0
pq = [(0, start)] # 优先级队列,元组的第一个元素代表距离
while pq:
current_distance, current_node = heapq.heappop(pq)
# 如果当前节点的距离已经是最小的,无需再检查它的邻居
if current_distance > distances[current_node]:
continue
# 遍历当前节点的所有邻居
for neighbor, weight in graph[current_node].items():
distance = current_distance + weight
# 如果通过这个邻居可以得到更短的路径,则更新其距离并插入优先队列
if distance < distances[neighbor]:
distances[neighbor] = distance
heapq.heappush(pq, (distance, neighbor))
return distances
# 示例图表示法:邻接字典,键是起点,值是另一个字典,表示相邻节点及其权重
graph = {
'A': {'B': 5, 'C': 1},
'B': {'A': 5, 'D': 1},
'C': {'A': 1, 'D': 4},
'D': {'B': 1, 'C': 4, 'E': 8},
'E': {'D': 8}
}
start_node = 'A'
shortest_distances = dijkstra(graph, start_node)
print(f"从{start_node}到其他节点的最短距离: {shortest_distances}")
阅读全文