迪杰斯特拉算法讲解
来源:互联网 发布:npm 换淘宝源 编辑:程序博客网 时间:2024/05/18 01:45
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。(百度百科)
这里我说一下我对于这个算法的理解, 就是求一个点到其他点的最短路径。
我们需要一个二维数组储存图的信息, 开始所有边的权值都设为正无穷, 也就是一个给定数据达不到的正数
还需要两个一维数组, 一个存储目标点到当前点的最小值, 一个储存当前点是否已经求出最短路
然后就是每次找到一个最短路, 然后就从当前点用循环更新每一个没有求出最短路点的最短路数组的值、
#include <stdio.h>#define INF 65535int map[50][50];int path[50];int visited[50];int main(){int n, m;scanf("%d%d", &n, &m);for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)map[i][j] = INF;for (int i = 0; i < m; i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);map[a][b] = c;}for (int i = 0; i < n; i++){path[i] = map[0][i];}visited[0] = 1;for (int i = 1; i < n; i++){int min = 65535, k;for (int j = 1; j < n; j++)if (path[i] < min && !visited[i]){min = path[i];k = i;}visited[k] = 1;printf("0到%d最短路径为%d\n", k, min);for (int j = 1; j < n; j++){if (!visited[j] && map[k][j] + min < path[j]){path[j] = map[k][j] + min;}}}return 0;}
0 0
- 迪杰斯特拉算法讲解
- 【算法】高精度算法讲解
- 哈希表算法讲解
- 普利姆算法通俗讲解
- 哈希表算法讲解
- sift算法讲解
- floyd算法讲解
- A* 算法讲解
- Hog算法讲解
- KMP算法讲解
- 贪心算法讲解
- tarjan算法讲解
- KMP算法 讲解
- KMP算法通俗讲解
- Dijkstra算法模拟讲解
- Kruskal算法模拟讲解
- 匈牙利算法原理讲解
- 冒泡算法讲解
- SSH——单例模式引起的服务器启动错误
- qt5 keyboardless & mouseless
- 社区发现算法(三)
- oracle文档(原创)
- Java Servlet编写Json自定义数据接口
- 迪杰斯特拉算法讲解
- 不同activity通过Application实现全局变量共享
- iPhone:动态获取UILabel的高度和宽度----转
- oracle 数据库base64位转码解码
- Lua的基本信息调试
- 第十一周项目1————(1) 存储班长信息的学生类
- Spring中属性文件properties的读取与使用
- tortoiseSVN创建分支branch和标签tag
- 选择排序