### Dijkstra算法相关的LeetCode题目
Dijkstra算法主要用于解决单源最短路径问题,适用于加权图中的路径计算。以下是与Dijkstra算法密切相关的LeetCode题目:
#### 题目一:网络延迟时间 (Network Delay Time)
这是一道经典的Dijkstra算法应用题,目标是找到信号从起点传播到所有节点所需的最长时间。如果无法到达某些节点,则返回 `-1`[^1]。
```python
import heapq
from collections import defaultdict
def networkDelayTime(times, n, k):
graph = defaultdict(list)
for u, v, w in times:
graph[u].append((v, w))
dist = {node: float('inf') for node in range(1, n + 1)}
dist[k] = 0
heap = [(0, k)]
while heap:
current_dist, u = heapq.heappop(heap)
if current_dist > dist[u]:
continue
for v, weight in graph[u]:
distance = current_dist + weight
if distance < dist[v]:
dist[v] = distance
heapq.heappush(heap, (distance, v))
max_time = max(dist.values())
return max_time if max_time != float('inf') else -1
```
此代码实现了基于优先队列优化的Dijkstra算法来解决问题。
---
#### 题目二:最低成本连接所有城市 (Min Cost to Connect All Points)
虽然该题主要涉及Kruskal或Prim算法,但在特定情况下也可以通过构建完全图并使用Dijkstra算法求解[^2]。不过需要注意的是,这种方法效率较低,通常不推荐作为首选方案。
---
#### 题目三:最便宜航班 (Cheapest Flights Within K Stops)
尽管本题可以通过Bellman-Ford或者BFS方法解答,但采用修改版的Dijkstra同样可行。区别在于需要增加状态维度以记录剩余跳跃次数[^5]。
```python
def findCheapestPrice(n, flights, src, dst, k):
graph = defaultdict(list)
for u, v, p in flights:
graph[u].append((v, p))
pq = [(0, src, k + 1)] # price, vertex, stops remaining
while pq:
cost, city, steps_left = heapq.heappop(pq)
if city == dst:
return cost
if steps_left > 0:
for neighbor, price in graph[city]:
new_cost = cost + price
heapq.heappush(pq, (new_cost, neighbor, steps_left - 1))
return -1
```
上述实现展示了如何扩展传统Dijkstra逻辑适应更多约束条件下的场景需求[^5]。
---
### 总结
以上列举了几类适合练习Dijkstra算法的经典LeetCode题目及其对应解决方案概览。每种变体都体现了不同实际应用场景下对该基础理论框架的具体调整运用方式。