Dijkstra 算法是一种用于在加权图中找到单源最短路径的算法。在 LeetCode 中,有许多关于图论的问题可以使用 Dijkstra 算法来解决。以下是一些使用 Dijkstra 算法的 LeetCode 图论问题示例:
示例问题
最短路径问题 I - 矩阵中的最短路径 (
LeetCode 127
)- 查看题目
- 题目描述:在一个有向图中,找到两个节点之间的最短路径。
最短路径问题 II - 矩阵中的所有最短路径 (
LeetCode 743
)- 查看题目
- 题目描述:在一个有向图中,找到所有节点之间的最短路径。
Dijkstra 算法步骤
- 初始化节点距离表,将起点距离设为 0,其他节点设为无穷大。
- 选择一个未访问的节点,将其距离设为当前已知的最近距离。
- 更新相邻节点的距离,如果找到更短的路径,则更新距离表。
- 重复步骤 2 和 3,直到所有节点都被访问过。
示例代码
import heapq
def dijkstra(graph, start):
dist = {node: float('inf') for node in graph}
dist[start] = 0
pq = [(0, start)]
while pq:
d, node = heapq.heappop(pq)
for w, neighbor in graph[node].items():
if dist[neighbor] > d + w:
dist[neighbor] = d + w
heapq.heappush(pq, (d + w, neighbor))
return dist
总结
Dijkstra 算法是解决图论问题的重要工具,特别是在寻找最短路径方面。通过 LeetCode 上的练习,可以更好地理解和应用 Dijkstra 算法。