码迷,mamicode.com
首页 > 编程语言 > 详细

最短路问题常用算法总结和模板

时间:2016-03-31 14:13:30      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

1.Dijkstra 算法

      Dijkstra算法适用于边权为正的情况。

      用于计算正权图上的单源最短路(Single-Source Shortest Paths,SSSP)。所谓单源最短路即从单个源点出发,到所有结点的最短路。

      算法同时适用于有向图和无向图。

     伪代码:

    

 1 清除所有点的标点(有的话)
 2 设d[0]=0,其他d[i]=INF
 3 循环n次{
 4     在所有未标号结点中,选出d的最小的结点x
 5     给结点x标号
 6     对于从x出发的所有边(x,y),更新d[y]=min{d[y],d[x]+w[x][y]]}
 7 }
 8 //程序
 9 memset(v,0,sizeof(v));
10 for(int i=0;i<n;i++) d[i]=(i==0?0:INF);
11 for(int i=0;i<n;i++) {
12     int x,m=INF;
13     for(int y=0;y<n;y++) if(!v[y]&&d[y]<=m) m=d[x=y];
14     v[x]=1;
15     for(int y=0;y<n;y++) d[y]=min(d[y],d[x]+w[x][y]);
16 }
17 //路径打印==动态规划方案打印
18 if(d[y]>d[x]+w[x][y]) {
19     d[x]=d[x]+w[x][y];
20     fa[y]=x;
21 }//替换d[y]=min(d[y],d[x]+w[x][y]),边的松弛操作

 

最短路问题常用算法总结和模板

标签:

原文地址:http://www.cnblogs.com/nuc-gxg/p/5340747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!