Dijkstra算法(单源最短路问题)
来源:互联网 发布:北京哪里有mac专柜 编辑:程序博客网 时间:2024/05/01 19:06
先写一点哈~~
这个算法是通过为每个顶点 v 保留目前为止所找到的从 s 到 v 的最短路径来工作的。
初始时,原点 s 的路径长度值被赋为 0 (d[s] = 0),若存在能直接到达的边 (s, m),则把d[m]设为w(s, m),同时把所有其他 s 不能直接到达的顶点的路径长度设为无穷大,即表示我们不知道任何通向这些顶点的路径(对于 V 中所有顶点 v 除 s 和上述 m 外 d[v] = ∞)。当算法结束时,d[v] 中存储的便是从 s 到 v 的最短路径,或者如果路径不存在的话是无穷大。
Dijkstra 算法的基础操作是边的拓展:如果存在一条从 u 到 v 的边,那么从 s 到 v 的最短路径可以通过将边(u, v)添加到尾部来拓展一条从 s 到 v 的路径。这条路径的长度是 d[u] + w(u, v)。如果这个值比目前已知的 d[v] 的值要小,我们可以用新值来替代当前 d[v] 中的值。拓展边的操作一直运行到所有的 d[v] 都代表从 s 到 v 最短路径的花费。这个算法经过组织因而当 d[u] 达到它最终的值的时候每条边(u, v)都只被拓展一次。
void dijkstra(int s){ memset(visit, false, sizeof(visit)); visit[s] = true; for (int i = 0; i < n; i++) { d[i] = w[s][i]; } int index; for (int i = 1; i < n; i++) { int mincost = INF; for (int j = 0; j < n; j++) { if (!visit[j] && d[j] < mincost) { mincost = d[j]; index = j; } } visit[index] = true; for (int j = 0; j < n; j++) { if (!visit[j] && d[j] > d[index] + w[index][j]) { d[j] = d[index] + w[index][j]; } } }}
0 0
- Dijkstra算法(单源最短路问题)
- 单源最短路问题(dijkstra算法)
- 单源最短路问题 dijkstra算法 总结
- 算法学习之Dijkstra单源最短路问题
- 最短路问题 (Dijkstra 迪杰斯特拉算法)
- 单源最短路dijkstra算法
- Dijkstra-算法-----单源最短路
- Dijkstra 算法 -单源最短路
- 单源最短路->Dijkstra算法
- Dijkstra算法-单源最短路
- poj3268(单源最短路,dijkstra算法)
- Dijkstra算法---单源最短路(基础模板)
- POJ 1502 单源最短路(Dijkstra算法)
- 单源最短路—dijkstra算法
- 单源最短路Dijkstra算法源码
- 最短路算法(dijkstra)
- 最短路(Dijkstra算法)
- 【AC梦工厂】poj3013最短路问题(Dijkstra算法)
- 解决ubuntu下深度音乐和wine程序托盘图标的问题
- 欢迎使用CSDN-markdown编辑器
- 0.附录
- 1013
- 关于文件目录线程级深度优先搜索效率的研究
- Dijkstra算法(单源最短路问题)
- Web前端性能优化(九)图像和Cookie优化
- 最短编辑距离
- 用到MNIST数据集的实验(总结中……)
- 【LeetCode】 17. Letter Combinations of a Phone Number
- 学生信息系统之优化(一)之ascii码
- Codeforces 665C Simple Strings【暴力,贪心】
- linux命令
- 处理TAP国际漫游话单的几种类库使用方法