在算法学习中,路径问题是一个常见的题型。在 LeetCode 上,有很多关于路径问题的题目,其中短路路径问题是一个比较经典的题型。
短路路径问题概述
短路路径问题通常指的是在一个图中,找到两个顶点之间的最短路径。这里的“最短”可以是距离最短,也可以是时间最短,具体取决于问题的定义。
解决方法
解决短路路径问题常用的算法有:
- Dijkstra 算法:适用于带权重的图,可以找到两个顶点之间的最短路径。
- Floyd-Warshall 算法:适用于所有顶点对之间的最短路径,但时间复杂度较高。
代码示例
以下是一个使用 Dijkstra 算法解决短路路径问题的 Python 代码示例:
import heapq
def dijkstra(graph, start):
distances = {vertex: float('infinity') for vertex in graph}
distances[start] = 0
priority_queue = [(0, start)]
while priority_queue:
current_distance, current_vertex = heapq.heappop(priority_queue)
if current_distance > distances[current_vertex]:
continue
for neighbor, weight in graph[current_vertex].items():
distance = current_distance + weight
if distance < distances[neighbor]:
distances[neighbor] = distance
heapq.heappush(priority_queue, (distance, neighbor))
return distances
# 示例图
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1}
}
# 计算从 A 到 D 的最短路径
shortest_path = dijkstra(graph, 'A')
print(shortest_path['D']) # 输出:3
扩展阅读
更多关于 LeetCode 算法练习的内容,可以参考本站的其他相关文章。