最短路径模板
来源:互联网 发布:小说书籍知乎 编辑:程序博客网 时间:2024/05/21 00:48
#include<stdio.h> #include<math.h>#include<string.h>#define max(a,b) (a>b)? b:a#define MAX 100 #define INF 1000000000 int dijkstra (int mat[][MAX],int n, int s,int f) {//s为起点, f:为终点 int dis[MAX];//记录到任意点的最短距离 int mark[MAX];//记录被选中的结点 int i,j,k = 0; for(i = 0 ; i < n ; i++)//初始化所有结点,每个结点都没有被选中 mark[i] = 0; for(i = 0 ; i < n ; i++)//将每个结点到start结点weight记录为当前distance { dis[i] = mat[s][i]; //path[i] = s; } mark[s] = 1;//start结点被选中 //path[s] = 0; dis[s] = 0;//将start结点的的距离设置为0 int min ;//设置最短的距离。 for(i = 1 ; i < n; i++) { min = INF; for(j = 0 ; j < n;j++) { if(mark[j] == 0 && dis[j] < min)//未被选中的结点中,距离最短的被选中 { min = dis[j] ; k = j; } } mark[k] = 1;//标记为被选中 for(j = 0 ; j < n ; j++) { if( mark[j] == 0 && (dis[j] > (dis[k] + mat[k][j])))//修改剩余结点的最短距离 { dis[j] = dis[k] + mat[k][j]; } } } return dis[f]; } int mat[MAX][MAX]; int main() { int n,m; while(scanf("%d %d",&n,&m)) //n是节点个数 { int a,b,dis; if(n == 0 || m == 0) break; int i,j; for(i = 0 ; i < n;i++) for(j = 0 ; j < n; j++) mat[i][j] = INF; for(i = 0 ; i < m ;i++) //接受m行数据 { scanf("%d %d %d",&a,&b,&dis); --a,--b; if(dis < mat[a][b] || dis < mat[b][a]) mat[a][b] = mat[b][a] = dis; } int ans = dijkstra(mat,n,0,n-1); printf("%d\n",ans); } return 0; }
0 0
- 最短路径模板
- 最短路径模板
- dij 最短路径模板
- SPFA最短路径模板
- 最短路径 模板小结
- 【模板】最短路径spfa
- 最短路径(7)--poj1502(最短路径模板题)
- Dijkstra最短路径模板2
- 最短路径问题(算法模板)
- poj 2387 最短路径 **dijkstra模板
- 最短路径Dijkstra算法模板
- 最短路径Floyd算法模板
- 最短路径bellman-ford算法模板
- 最短路径spfa算法模板
- ACM模板 dijkstra,最短路径
- 最短路径之 Dijkstra模板
- BFS 模板 【迷宫的最短路径】
- dijkstra 最短路径算法模板
- Cocos2d-x 内存管理机制
- shell变量
- xdoj 1142: 删除字符
- 并查集模板
- Hadoop安装教程
- 最短路径模板
- LeetCoder 13. Roman to Integer
- Java 实例
- Hive中如何快速的复制一张分区表(包括数据)
- java多态polymorphic多态的理解一
- NPOI设置Excel单元格样式
- ISP图像质量调节介绍
- Linux--shell编程学习
- Linux线程------函数用法详解