用上述得到的边,编写一段Dijkstra 算法
时间: 2024-05-06 22:15:45 浏览: 51
以下是使用Python编写的Dijkstra算法实现:
```python
import heapq
def dijkstra(graph, start):
# 初始化距离字典
distances = {node: float('inf') for node in graph}
distances[start] = 0
# 初始化堆队列和访问集合
heap = [(0, start)]
visited = set()
while heap:
# 取出堆顶元素
(cost, node) = heapq.heappop(heap)
# 如果当前节点已被访问,则跳过
if node in visited:
continue
# 将当前节点标记为已访问
visited.add(node)
# 更新与当前节点相邻节点的最短距离
for neighbor, distance in graph[node].items():
if neighbor not in visited:
new_distance = distances[node] + distance
if new_distance < distances[neighbor]:
distances[neighbor] = new_distance
heapq.heappush(heap, (new_distance, neighbor))
return distances
```
其中,graph是一个字典,表示图的邻接表。例如,如果这个图有三个节点A、B、C,边的权重分别为3、4、1,则可以表示为:
```python
graph = {
'A': {'B': 3, 'C': 4},
'B': {},
'C': {'B': 1}
}
```
start是起始节点。例如,如果要从节点A开始寻找最短路径,则调用dijkstra(graph, 'A')。函数的返回值是一个字典,表示从起始节点到每个节点的最短距离。
阅读全文