单源最短路径算法 - Dijkstra算法
2017-09-18 17:52
381 查看
# 单源最短路径算法 - Dijkstra算法
标签(空格分隔): 算法
介绍
代码
参考《啊哈算法》第六章第二节,PDF在线阅读
这个算法可以解决单源最短路径问题,这里是从第一个点开始到其他点的最短路径。
不能有负权边,因为扩展到负权边的时候会产生更短的路程,有可能就破坏了已经更新的点路程不会改变的性质。
时间复杂度 O(N^2),使用邻接表表示图,绝大部分情况下能降低时间复杂度,具体看PDF,我也没怎么看懂。
标签(空格分隔): 算法
介绍
代码
参考《啊哈算法》第六章第二节,PDF在线阅读
介绍
这是一个贪心算法,每次新扩展一个路程最短的点,更新与其相邻的点的路程。这个算法可以解决单源最短路径问题,这里是从第一个点开始到其他点的最短路径。
不能有负权边,因为扩展到负权边的时候会产生更短的路程,有可能就破坏了已经更新的点路程不会改变的性质。
时间复杂度 O(N^2),使用邻接表表示图,绝大部分情况下能降低时间复杂度,具体看PDF,我也没怎么看懂。
代码
/** * 单源最短路径算法 * Dijkstra算法 * 时间复杂度 O(N^2) * by jtahstu at 2017-09-18 */ #include <iostream> #include <climits> using namespace std; int main() { int n, m; cin >> n >> m; int e[11][11] = {0}, dis[11] = {0}, book[11] = {0}; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (i == j) e[i][j] = 0; else e[i][j] = INT_MAX; int a, b, c; for (int i = 1; i <= m; i++) { cin >> a >> b >> c; e[a][b] = c; } for (int i = 1; i <= n; ++i) { dis[i] = e[1][i]; book[i] = 0; } book[1] = 1; int min, u; for (int i = 1; i <= n - 1; ++i) { //找出值最小的点去做中转,循环n-1次 min = INT_MAX; for (int j = 1; j <= n; j++) { //找到离1号顶点最近的顶点,然后该点最短路径值确定 if (book[j] == 0 && min > dis[j]) { min = dis[j]; u = j; } } book[u] = 1; //标记该点最短路径值已经确定 for (int v = 1; v <= n; v++) { if (dis[v] > dis[u] + e[u][v] && e[u][v] != INT_MAX) //有出边,且可以通过u点中转一下 dis[v] = dis[u] + e[u][v]; } } for (int i = 1; i <= n; i++) cout << dis[i] << " "; return 0; } /** 6 8 1 2 1 1 3 2 2 3 3 2 4 3 2 5 1 3 4 5 4 6 2 5 6 1 0 1 2 4 2 3 6 9 1 2 1 1 3 12 2 3 9 2 4 3 3 5 5 4 3 4 4 5 13 4 6 15 5 6 4 0 1 8 4 13 17 */
相关文章推荐
- 单源最短路径算法--Dijkstra算法和Bellman-Ford算法
- 贪心算法--Dijkstra算法(单源最短路径算法)
- 数据结构与算法12:单源最短路径Dijkstra算法
- 算法java实现--贪心算法--单源最短路径问题--Dijkstra算法
- 最短路径基本介绍(2)--Dijkstra算法(单源最短路径算法)
- 【算法导论】单源最短路径之Dijkstra算法
- 【算法】图的应用之Dijkstra算法--单源最短路径的求解
- dijkstra算法,单源最短路径算法,含记录路径
- 图算法 单源最短路径 Dijkstra算法(邻接表/邻接矩阵+优先队列STL)
- 【算法导论】单源最短路径之Dijkstra算法
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 图论——单源最短路径算法之Dijkstra算法
- Dijkstra算法是解单源最短路径问题的一个贪心算法
- 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
- 算法——单源最短路径:Bellman-Ford算法、Dijkstra算法
- Dijkstra算法,Bellman-Ford算法和BFS算法解决有向图的单源最短路径问题
- (转)图算法单源最短路径Dijkstra算法(邻接表/邻接矩阵+优先队列STL)
- 算法导论-单源最短路径-Dijkstra算法的实现
- 单源最短路径问题(dijkstra算法 及其 优化算法(优先队列实现))
- 图之单源Dijkstra算法、带负权值最短路径算法