单源最短路径问题 Dijkstra算法
来源:互联网 发布:不要在淘宝请符 编辑:程序博客网 时间:2024/05/17 09:30
算法原理部分在这就不多说了,其思想就是以起始点为中心向外层层扩展,直到扩展到终点为止。
该算法要求图中不存在负权边。
模板如下:
s【】表示该点是否已经计算出对应的dist【】, 是为true,否则为false;
dist【i】表示起始点到i点的距离;
ans【i】【j】表示点i到点j的距离,如果i,j不相邻,则为无穷大;
#define INF 999999999#define MAX 10005using namespace std;bool s[MAX];int dist[MAX],ans[MAX][MAX];void Dijkstra(int n,int v)//传入顶点数n和起始点v{ int newdist,temp,u,i,j; for(i=1;i<=n;i++) { dist[i]=ans[v][i]; s[i]=false; } dist[v]=0; s[v]=true; for(i=2;i<=n;i++) { temp=INF; u=v; for(j=1;j<=n;j++) if((!s[j])&&(dist[j]<temp)) { u=j; temp=dist[j]; } s[u]=true; for(j=1;j<=n;j++) if((!s[j])&&(ans[u][j]<INF)) { newdist=dist[u]+ans[u][j]; if(newdist<dist[j]) dist[j]=newdist; } }}
HDU2544 最短路:
#include <cstdio>#include <iostream>#define INF 999999999#define MAX 10005using namespace std;int s[MAX];int dist[MAX],ans[MAX][MAX];void Dijkstra(int n,int v){ int newdist,temp,u,i,j; for(i=1;i<=n;i++) { dist[i]=ans[v][i]; s[i]=0; } dist[v]=0; s[v]=1; for(i=1;i<=n;i++) { temp=INF; u=v; for(j=1;j<=n;j++) if((!s[j])&&(dist[j]<temp)) { u=j; temp=dist[j]; } s[u]=1; for(j=1;j<=n;j++) if((!s[j])&&(ans[u][j]<INF)) { newdist=dist[u]+ans[u][j]; if(newdist<dist[j]) dist[j]=newdist; } }}int main(){ int m,n; int a,b,t; while(scanf("%d%d",&n,&m)) { if(m==0&&n==0) break; for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) ans[i][j]=INF; for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&t); ans[a][b]=t; ans[b][a]=t; } Dijkstra(n,1); printf("%d\n",dist[n]); } return 0;}
0 0
- 单源最短路径问题 Dijkstra算法
- 单源最短路径问题(Dijkstra算法)第五集
- 贪心算法------单源最短路径问题(Dijkstra)
- 单源最短路径问题——Dijkstra算法
- 单源最短路径问题之Dijkstra算法详解
- 单源最短路径问题-迪杰斯特拉(Dijkstra)算法
- 单源最短路径 dijkstra算法
- 单源最短路径Dijkstra算法
- Dijkstra 单源最短路径算法
- 单源最短路径 :Dijkstra 算法
- 单源最短路径(Dijkstra算法)
- 单源最短路径----------Dijkstra算法
- 单源最短路径Dijkstra算法
- 单源最短路径(Dijkstra算法)
- 单源最短路径 : Dijkstra 算法
- Dijkstra单源最短路径算法
- 算法 单源最短路径Dijkstra
- 单源最短路径-Dijkstra算法
- 前期C语言回顾 数组
- C++ 代码中调用scp自动传文件
- Docker容器
- 张小春:小本创业的思想集结
- HBase0.96 升级步骤及源代码分析
- 单源最短路径问题 Dijkstra算法
- DirectD3D-纹理映射
- Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)
- Replace - with an en dash character (–, –) ?
- linux内核中的GPIO系统之(2):pin control subsystem
- Rational Rose 心得
- ARC
- win7下32位eclipse启动错误
- 跟我学正则表达式] 4. 使用元字符