实现迪杰斯特拉算法
时间: 2023-08-31 20:23:58 浏览: 148
好的,迪杰斯特拉算法是一种单源最短路径算法,其基本思想是从起点开始,逐步扩展最短路径,直到到达终点为止。下面是一个简单的实现示例(假设点的编号从0开始):
```python
import heapq
def dijkstra(graph, start):
# 初始化距离为无穷大
distances = [float('inf')] * len(graph)
# 起点的距离为0
distances[start] = 0
# 用堆来维护未处理的点
heap = [(0, start)]
while heap:
# 取出距离最小的点
(dist, node) = heapq.heappop(heap)
# 如果该点已经处理过,直接跳过
if dist > distances[node]:
continue
# 遍历所有的邻居,更新距离
for neighbor, weight in graph[node].items():
new_distance = dist + weight
# 如果新的距离更短,更新距离
if new_distance < distances[neighbor]:
distances[neighbor] = new_distance
heapq.heappush(heap, (new_distance, neighbor))
return distances
```
这个实现中,我们使用了一个堆来维护未处理的点,并且使用了一个数组来保存每个点的最短距离。算法的时间复杂度为O(ElogV),其中E为边数,V为点数。
阅读全文