Dijkstra算法
来源:互联网 发布:group by 多个字段知乎 编辑:程序博客网 时间:2024/06/14 14:26
用于计算从单个源点到图中任意点的最短路问题(适用于边权值为正的情况)。
#include<iostream>#include<cstdio>#include<cstring>#define INF 0xffffffint visit[INF],map[100][100],dis[100],fa[100];void Dijkstra(){ memset(visit,0,sizeof(visit)); for(int i=1;i<n;i++) dis[i]=map[0][i]; for(int i=0;i<n;i++) fa[i]=i; //初始化父节点 visit[0]=1; for(int i=0;i<n;i++) { int k,temp=INF; for(int j=0;j<n;j++) if(!visit[j] && dis[j]<=temp) temp=dis[k=j]; visit[k]=1; for(int j=0;j<n;j++) if(dis[j]>dis[k]+map[k][j]) { dis[j]=dis[k]+map[k][j]; //更新最短路 fa[j]=k; //更新父节点 } }}
一样的意思。
#include<iostream>#include<cstdio>#include<cstring>#define INF 0xffffff#define MAX 110int dis[MAX],visit[MAX],map[MAX][MAX];int m,n;void Dijkstra(){ memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++) dis[i]=(i==1?0:INF); for(int i=1;i<=n;i++) { int k,temp=INF; for(int j=1;j<=n;j++) if(!visit[j] && temp>dis[j]) temp=dis[k=j]; visit[k]=1; for(int j=1;j<=n;j++) if(map[k][j] && dis[j]>dis[k]+map[k][j]) //map[k][j]==0表示不存在该条路径。 dis[j]=dis[k]+map[k][j]; }}
- Dijkstra算法
- dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra 算法
- dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- dijkstra算法
- NSString和NSData通过Base64编码的相互转换
- 北邮12年网研 -二叉树的层数
- 矩阵快速幂 zoj-3690 Choosing number
- Java的内存回收机制
- 黑马程序员—网络编程
- Dijkstra算法
- vim filetype.vim
- 用递归方法对二叉树进行层次遍历
- gcc的使用简介与命令行参数说明
- ViewPager初识
- strcpy函数实现
- 享受Code::Blocks编辑快感的几个关键
- make命令解析
- C. Building Permutation