📜  Dijkstra 算法的有向图中的最短路径(1)

📅  最后修改于: 2023-12-03 14:40:43.827000             🧑  作者: Mango

Dijkstra 算法的有向图中的最短路径

简介

Dijkstra 算法是一种用于在有向图中找到最短路径的算法。它可以找到一个顶点到其他所有顶点的最短路径。

算法原理

Dijkstra 算法的原理可概括为以下几个步骤:

  1. 创建一个距离表,用于存储每个顶点到起始顶点的距离。初始时,距离表中只包含起始顶点,其余顶点的距离设为无穷大。
  2. 选择距离表中距离最小的顶点作为当前顶点,标记该顶点为已访问。
  3. 对于当前顶点的每个邻居顶点,计算通过当前顶点到达邻居顶点的距离,并更新距离表中邻居顶点的距离。
  4. 重复步骤2和步骤3,直到所有顶点都被访问过或者距离表中的所有顶点的距离都被确定为最短距离。
示例

下面是一个使用 Python 实现的 Dijkstra 算法的示例:

import sys

def dijkstra(graph, start):
    distance = {}  # 距离表
    visited = set()  # 访问过的顶点集合

    # 初始化距离表,起始顶点距离为0,其他顶点距离为无穷大
    for vertex in graph:
        distance[vertex] = sys.maxsize
    distance[start] = 0

    while len(visited) < len(graph):
        # 选择距离最小的顶点作为当前顶点
        current_vertex = min(set(distance.keys()) - visited, key=distance.get)
        visited.add(current_vertex)

        # 更新距离表中的距离
        for neighbor, weight in graph[current_vertex].items():
            new_distance = distance[current_vertex] + weight
            if new_distance < distance[neighbor]:
                distance[neighbor] = new_distance

    return distance

# 有向图的邻接表表示
graph = {
    'A': {'B': 5, 'C': 3},
    'B': {'D': 2},
    'C': {'B': 1, 'D': 6},
    'D': {'A': 2}
}

start_vertex = 'A'
shortest_distances = dijkstra(graph, start_vertex)

# 输出最短路径
for vertex, distance in shortest_distances.items():
    print(f"从顶点 {start_vertex} 到顶点 {vertex} 的最短距离为 {distance}")
结论

Dijkstra 算法能够有效地找到有向图中一个顶点到其他所有顶点的最短路径。它的时间复杂度为 O(V^2),其中 V 是顶点的数量。这使得它在处理较小规模的图时非常高效。