最短路径算法一
2017-05-07 11:31
169 查看
最短路径算法1——Floyed与Dijkstra算法。
Floyed算法:
求图中一个点到另一个点的最短路径,毫无疑问Floyed算法是最简单的,而且是多源最短路径,但时间复杂度很高,达到O(n^3)。
原理就是不断遍历一边所有点,把他们当作中间点,每次更新整个图。
Floyed代码:
1 #include<cstdio> 2 #include<iostream> 3 #define N 42000 4 using namespace std; 5 int next ,to ,dis ,num,head ,n,m,p,q,a,b,c,d ,minn,u ,k; 6 void add(int false_from,int false_to,int false_dis){ 7 next[++num]=head[false_from]; 8 to[num]=false_to; 9 dis[num]=false_dis; 10 head[false_from]=num; 11 } 12 int main(){ 13 scanf("%d%d%d%d",&n,&m,&p,&q); 14 for(int i=1;i<=m;++i){ 15 scanf("%d%d%d",&a,&b,&c); 16 add(a,b,c); 17 add(b,a,c); 18 } 19 for(int i=1;i<=n;++i) 20 d[i]=42000000; 21 dView Code [p]=0; 22 for(int i=1;i<=n;++i){ 23 minn=42000000; 24 for(int j=1;j<=n;++j) 25 if(!u[j]&&d[j]<minn){ 26 minn=d[j]; 27 k=j; 28 } 29 u[k]=1; 30 for(int j=head[k];j;j=next[j]) 31 d[to[j]]=min(d[to[j]],d[k]+dis[j]); 32 } 33 printf("%d",d[q]); 34 return 0; 35 }
相关文章推荐
- Floyd-Warshall 算法-- 最短路径(适合节点密集的图)
- Bellman-Ford 算法实现单源最短路径
- 最短路径算法(Dijkstra算法、Floyd-Warshall算法)
- 图论の最短路径算法
- 最短路径算法—Dijkstra算法与Floyd算法
- python编写的最短路径算法
- 经典算法面试题解答(三)----- 最短路径、最长路径
- 最短路径迪杰特斯拉算法
- (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍
- acm题目及我的程序(2)——Knight Moves (骑士跳跃) ——任意两点间的最短路径所有信息(算法1)
- SRM 583 Div II Level Three:GameOnABoard,Dijkstra最短路径算法
- 算法实现Java之最短路径迪杰斯特拉(Dijkstra)
- 最短路径算法(图论)
- 克鲁斯卡尔最短路径算法详解
- 最短路径算法详解《转载》
- 最短路径算法复杂度总结
- 最短路径算法 模板_Dijkstra_Bellman.ford_Floyd_spfa
- Dijkstra/Floyd-Warshall 最短路径算法
- 最短路径算法案例测试
- 数据结构与算法:最短路径,拓扑排序的基本概念