用c++数据结构来解决这个问题:给一个n (1≤n≤106) 个点m(1≤m≤106) 条边的无向图,求 s 到 t 的最短路的长度。 数据保证,s 出发可以到达 t。
时间: 2024-02-16 14:02:29 浏览: 123
C++寻求最短最长路
这个问题可以使用 Dijkstra 算法来解决。Dijkstra 算法可以用于解决单源最短路径问题,即给定一个起点,求到其它所有点的最短路径。具体实现过程如下:
1. 初始化:将起点 s 的最短路径长度 dist[s] 设为 0,将其它点的最短路径长度 dist[i] 设为正无穷。
2. 将起点 s 加入到集合 S 中,表示已经找到了从起点 s 到 s 的最短路径。
3. 对于起点 s 相邻的点 i,更新其最短路径长度:
如果从起点 s 到 i 的路径长度 dist[s]+w(s,i) 小于 dist[i],则更新 dist[i]=dist[s]+w(s,i)。
4. 从未加入集合 S 的点中选择一个距离起点 s 最近的点 u,将其加入集合 S 中。
5. 重复步骤 3 和 4,直到所有点都被加入集合 S 中,或者终点 t 被加入集合 S 中。
6. 返回 dist[t],即起点 s 到终点 t 的最短路径长度。
这个算法可以用优先队列来实现,时间复杂度为 O(mlogn),其中 m 是边数,n 是点数。
以下是 C++ 实现代码:
阅读全文