Dijskra 算法求单源最短路径问题,给定加权有向图,求源代码
时间: 2024-10-05 14:00:36 浏览: 38
Dijkstra算法是一种用于解决单源最短路径问题的经典算法,适用于边权值非负的有向图或无向图。它通过维护一个优先队列来逐步更新节点到源点的距离,并避免已经找到更短路径的节点再次被访问。以下是使用Python实现的简单版本:
```python
import heapq
def dijkstra(graph, start):
distances = {node: float('infinity') for node in graph}
distances[start] = 0
queue = [(0, start)]
while queue:
current_distance, current_node = heapq.heappop(queue)
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(queue, (distance, neighbor))
return distances
# 示例:创建一个邻接字典表示有向图
graph = {
'A': {'B': 1, 'C': 4},
'B': {'C': 2, 'D': 5},
'C': {'D': 1},
'D': {}
}
start_node = 'A'
shortest_paths = dijkstra(graph, start_node)
print(shortest_paths) # 输出从'A'到其他各点的最短距离
```
在这个例子中,`graph`是一个键值对的字典,其中键代表节点,值是一个字典,记录该节点相邻的节点及其对应的权重。`dijkstra`函数返回一个字典,其中键是图中的节点,值是最短路径长度。
阅读全文