有一个 n个点 m 条边的无向图,请求出从 s 到 t 的最短路长度。 输入格式 第一行四个正整数 n, m, s, t。 接下来 m 行,每行三个正整数 u, v, w,表示一条连接 u, v 长为 w 的边。 1≤n≤2500,1≤m≤6200,1≤w≤1000。 输出格式 输出一行一个整数,表示答案。 样例输入 7 11 5 4 2 4 2 1 4 3 7 2 2 3 4 3 5 7 5 7 3 3 6 1 1 6 3 4 2 4 3 5 6 3 7 2 1 样例输出 7
时间: 2023-12-29 17:06:06 浏览: 186
有向图点对最短路径算法.doc
这是一个典型的最短路问题,可以使用 Dijkstra 算法或 Bellman-Ford 算法求解。以下是使用 Dijkstra 算法的示例代码:
```python
import heapq
n, m, s, t = map(int, input().split())
# 构建邻接表
graph = [[] for _ in range(n + 1)]
for i in range(m):
u, v, w = map(int, input().split())
graph[u].append((v, w))
graph[v].append((u, w))
# 初始化距离和 visited 数组
dist = [float('inf')] * (n + 1)
visited = [False] * (n + 1)
# 从起点开始,将距离设为 0
dist[s] = 0
# 使用堆来优化 Dijkstra 算法
heap = [(0, s)]
while heap:
d, u = heapq.heappop(heap)
if visited[u]:
continue
visited[u] = True
for v, w in graph[u]:
if not visited[v] and dist[v] > dist[u] + w:
dist[v] = dist[u] + w
heapq.heappush(heap, (dist[v], v))
# 输出最短路长度
print(dist[t])
```
该算法的时间复杂度为 O(mlogn),其中 m 是边数,n 是顶点数。
阅读全文