最短路问题常用算法总结和模板
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路问题常用算法总结和模板相关的知识,希望对你有一定的参考价值。
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]),边的松弛操作
以上是关于最短路问题常用算法总结和模板的主要内容,如果未能解决你的问题,请参考以下文章
常用最短路优化算法及例题(附模板)——-SPFA和Dijkstra