使用dijkstra算法计算单源最短路径
时间: 2023-06-13 10:02:32 浏览: 163
Dijkstra算法是一种贪心算法,用于计算从源节点到所有其他节点的最短路径。
算法步骤如下:
1. 创建一个距离数组dist[],用来保存源节点到其他节点的距离,初始值为无穷大。
2. 将源节点的dist值设为0。
3. 创建一个集合visited,用来保存已经确定最短路径的节点。
4. 从dist数组中选择一个距离最小的未访问节点,将其添加到visited集合中。
5. 对于该节点的所有未访问邻居节点,计算从源节点到该邻居节点的距离,如果该距离小于dist数组中该邻居节点的距离,则更新dist数组中该邻居节点的距离值。
6. 重复步骤4和5,直到所有节点都被访问。
下面是使用Dijkstra算法计算单源最短路径的Python代码示例:
```python
import sys
def dijkstra(graph, src):
dist = {node: float('inf') for node in graph}
dist[src] = 0
visited = set()
while len(visited) < len(graph):
node, node_dist = min(
[(n, dist[n]) for n in graph if n not in visited],
key=lambda x: x[1]
)
visited.add(node)
for neighbor, weight in graph[node].items():
new_dist = dist[node] + weight
if new_dist < dist[neighbor]:
dist[neighbor] = new_dist
return dist
if __name__ == '__main__':
graph = {
'A': {'B': 10, 'C': 3},
'B': {'C': 1, 'D': 2},
'C': {'B': 4, 'D': 8, 'E': 2},
'D': {'E': 7},
'E': {'D': 9}
}
src = 'A'
result = dijkstra(graph, src)
print(result)
```
输出结果为:
```
{'A': 0, 'B': 7, 'C': 3, 'D': 9, 'E': 5}
```
表示从源节点A到其他节点的最短路径长度。
阅读全文