dijkstra算法代码实现
2017-09-04 18:05
375 查看
//最短路径dijkstra算法 图的下标从1开始 //#include"stdafx.h" #include<iostream> #define size 1010 #define INF 0x3fffffff using namespace std; struct Graph { int vexNum;//顶点数 int edge;//边数 int map[size][size];//图的邻接矩阵 }; Graph g; int pre[size];//pre[v]的值为前驱顶点下标 int length[size];//length[v]表示startPos到v的最短路径长度和 void dijkstra(int startPos) { int i, j; int min; bool final[size];//标记是否求得顶点startPos至w的最短路径 //初始化数据 for (i = 1; i <= g.vexNum; i++) { final[i] = false; length[i] = g.map[startPos][i]; pre[i] = startPos; } length[startPos] = 0; final[startPos] = true; //开始主循环,每次求得startPos到某个v顶点的最短路径,并 加入v到集合S for (i = 1; i <= g.vexNum; i++) { if (i == startPos) continue; min = INF; //寻找length数组中下标最小的值与下标 for (j = 1; j <= g.vexNum; j++) { if (!final[j] && length[j] < min) { min = length[j]; i = j; } } final[i] = true; //更新length和pre for (j = 1; j <= g.vexNum; j++) { //如果经过i顶点的路径比现在这条路径的长度短的话 if (!final[j] && (min + g.map[i][j] < length[j])) { //说明找到了更短的路径,修改length[j]和pre[j] length[j] = min + g.map[i][j]; pre[j] = i; } } } } void init() { for (int i = 1; i <= g.vexNum; i++) { for (int j = 1; j <= g.vexNum; j++) { if (i == j) { g.map[i][j] = 0; } else { g.map[i][j] = INF; } } } } int main() { //输入顶点数、边数 while (cin >> g.vexNum >> g.edge && g.vexNum) { init(); int startPos, endPos, value; for (int i = 0; i < g.edge; i++) { cin >> startPos >> endPos >> value; g.map[startPos][endPos] = g.map[startPos][endPos] = value; } //输入最短路径的开始节点与终端节点 cout << "输入最短路径的开始节点与终端节点" << endl; cin >> startPos >> endPos; dijkstra(startPos); cout << length[endPos] << endl; } return 0; }
相关文章推荐
- 图论:最短路径搜索--Dijkstra算法(c代码实现)
- 图论:最短路径搜索--Dijkstra算法(c代码实现)
- 有向图某顶点到其他顶点最短路径的C程序实现代码(Dijkstra算法)
- 图论:最短路径搜索--Dijkstra算法(c代码实现)
- Dijkstra算法以及java实现_02(代码部分)
- 图论:最短路径搜索--Dijkstra算法(c代码实现)
- Dijkstra算法----单源最短路径的贪心算法Java具体代码实现
- c++实现Dijkstra算法完整代码
- HDU 2544-最短路(Dijkstra算法 Floyd算法 SPFA算法,3种实现代码,包含路径)
- 存储过程配合UpdateDaset方法批量插入Dataset数据实现代码
- ASP.NET中防止页面多次提交的代码实现
- ASP.NET简化编辑界面解决思路及实现代码(2)
- 二叉树的C++实现代码
- 基于JS实现简单的样式切换效果代码
- Josephus 问题的代码实现
- jsp+servlet用底层代码实现文件上传下载
- 用jQuery实现检测浏览器及版本的脚本代码
- java代码实现二维码图片的生成和解析
- Java swing实现分页显示代码
- java开发中JDBC连接数据库的代码实现与详解(转载)