1. 程式人生 > >最短路徑算法

最短路徑算法

open 多源 view 一個 family gif 最短路徑 -s dijkstra

最短路徑算法1——Floyed與Dijkstra算法。

求圖中一個點到另一個點的最短路徑,毫無疑問Floyed算法是最簡單的,而且是多源最短路徑,但時間復雜度很高,達到O(n^3)。

原理就是不斷遍歷一邊所有點,把他們當作中間點,每次更新整個圖。

Floyed代碼:

技術分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #define N 4200
 4 using namespace std;
 5 int n,m,p,q,a,b,c,dis[N][N];
 6 int main(){
 7     scanf("%d%d%d%d"
,&n,&m,&p,&q); 8 for(int i=1;i<=n;++i) 9 for(int j=1;j<=n;++j) 10 dis[i][j]=4200000; 11 for(int i=1;i<=m;++i){ 12 scanf("%d%d%d",&a,&b,&c); 13 dis[a][b]=c; 14 dis[b][a]=c; 15 } 16 for(int k=1;k<=n;++k) 17
for(int i=1;i<=n;++i) 18 for(int j=1;j<=n;++j) 19 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); 20 printf("%d",dis[p][q]); 21 return 0; 22 }
View Code

最短路徑算法