Dijkstra算法——求单源最短路径
2017-04-07 09:22
281 查看
来源自我的博客
http://www.yingzinanfei.com/2017/04/07/dijkstrasuanfaqiudanyuanzuiduanlujing/
http://www.yingzinanfei.com/2017/04/07/dijkstrasuanfaqiudanyuanzuiduanlujing/
#include <stdio.h> #include <limits.h> int main(){ int n, m; scanf("%d%d", &n, &m); int e[10][10]; // 初始化边 for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ if (i == j) e[i][j] = 0; else e[i][j] = INT_MAX; } } int t1, t2, t3; // 输入边 for (int i = 1; i <= m; i++){ scanf("%d%d%d", &t1, &t2, &t3); e[t1][t2] = t3; } int dis[10]; // 源点到任意点的距离 for (int i = 1; i <= n; i++){ dis[i] = e[1][i]; } int book[10]; // 1表示已处理 for (int i = 1; i <= n; i++){ book[i] = 0; } book[1] = 1; // 核心语句,需要处理n-1个点,循环n-1次 for (int i = 1; i <= n - 1; i++){ // 找当前未处理点中离源点最近的点 int min = INT_MAX, u; for (int j = 1; j <= n; j++){ if (book[j] == 0 && dis[j] < min){ min = dis[j]; u = j; } } book[u] = 1; // 将此最近的点标记为已处理 // 更新此点相邻的点到源点的距离 for (int v = 1; v <= n; v++){ if (e[u][v] < INT_MAX){ // 要直接相邻 if (dis[v] > dis[u] + e[u][v]){ dis[v] = dis[u] + e[u][v]; } } } } // 可以得到结果了 for (int i = 1; i <= n; i++){ printf("%d ", dis[i]); } return 0; }
相关文章推荐
- Dijkstra算法解决单源最短路径
- 单源最短路径(Dijkstra算法)
- Dijkstra算法,Bellman-Ford算法和BFS算法解决有向图的单源最短路径问题
- 【算法】Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现
- Dijkstra算法(单源最短路径)
- 单源最短路径( Dijkstra算法)JAVA实现
- 单源最短路径 -- Dijkstra算法
- Dijkstra算法求最短路和比最短路长1的路径的数目(单源最短路径plus)
- 单源最短路径 dijkstra算法实现
- Dijkstra算法求图的单源最短路径
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 图的单源最短路径:Dijkstra算法实现
- 每日一题 No.48 单源最短路径问题2(Dijkstra算法)
- 图算法 单源最短路径 Dijkstra算法(邻接表/邻接矩阵+优先队列STL)
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- Dijkstra算法,求单源最短路径(包含路径)
- Dijkstra算法(单源最短路径)
- 最短路径问题-----单源Dijkstra算法()
- 单源最短路径——Dijkstra算法,Bellman-Ford算法,SPFA算法
- 算法导论-单源最短路径-Dijkstra算法的实现