单源最短路径算法代码(必须有每行注释)
时间: 2023-10-04 22:05:02 浏览: 64
单源最短路径(算法 代码)
以下是 Dijkstra 算法的代码实现,它是一种常见的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。
```python
# 定义一个函数,用于计算从起点到每个节点的最短路径
def dijkstra(graph, start):
# 初始化距离字典
distance = {node: float('inf') for node in graph}
# 起点到自己的距离为0
distance[start] = 0
# 初始化未访问的节点集合
unvisited = set(graph)
# 开始遍历所有节点
while unvisited:
# 选取当前距离最短的节点
curr_node = min(unvisited, key=lambda node: distance[node])
# 从未访问的节点集合中移除该节点
unvisited.remove(curr_node)
# 遍历节点的所有邻居
for neighbor, weight in graph[curr_node].items():
# 计算从起点出发经过当前节点到达邻居节点的距离
total_distance = distance[curr_node] + weight
# 如果计算得到的距离比之前记录的距离更短,则更新距离字典
if total_distance < distance[neighbor]:
distance[neighbor] = total_distance
# 返回起点到每个节点的最短距离
return distance
```
其中,`graph` 是一个字典,表示图中每个节点及其邻居节点和对应的边权重,`start` 是起点节点。算法的时间复杂度为 $O(|V|^2)$ 或 $O(|E|+|V|\log|V|)$,具体取决于实现方式和数据结构。
阅读全文