題目鏈結hdu2066
用dijkstra演算法求單源最短路徑,由於題中源點有多個,所以要多次運用dijkstra演算法,然後比較求得最短距離。這裡要注意的就是可能有重邊,所以在輸入的時候要進行判斷,選擇最小的那條邊,下面是ac**。
#include
#include
#include
#include
using
namespace std;
#define inf 0x3fffffff
int link[
1005];
//鄰接的城市
int like[
1005];
//想去的城市
int dis[
1005];
//距離陣列,dis[j]表示源點到j的最短距離
int vis[
1005];
//標記結點
int w[
1005][
1005];
//鄰接矩陣
void
dijkstra
(int s,
int n)
vis[s]=1
;//標記訪問源點
dis[s]=0
;//源點到本身的距離為0
int k=s;
for(
int i=
0;i1;i++)}
vis[k]=1
;//標記該結點已求得最短路徑
for(
int j=
1;j<=n;j++
)//鬆弛操作}}
}int
main()
for(
int i=
0;i)scanf
("%d"
,&link[i]);
for(
int i=
0;i)scanf
("%d"
,&like[i]);
int min=inf;
for(
int i=
0;iprintf
("%d\n"
,min);}
return0;
}
最短路徑 Dijkstra演算法 杭電2544
開始因為錯寫了m和n,runtime error了幾次,用dijkstra演算法時,迴圈中應該是點的數目,也就是n,而不是m 注意該題是無向圖 include includeusing namespace std define data 100000000 注意取值,100000000才可以通過,其...
HDOJ 杭電1874 暢通工程(Floyd演算法)
2018 5 1 我用的是floyd演算法,不得不說,這個演算法還是相當的優美了 雖然說時間複雜度達到了o n 3 但是 還是相當簡潔了!對於這個題目而言,有幾點需要注意的地方 1 賦值是雙向的,比如說a,b之間有一條要花費time時間的路,那麼我們需要將x a b 與x b a 都賦值為time。...
杭電 2066 乙個人的旅行
此題原來提交了乙份floyd warshall演算法的 然後結果是超時,所以寫了乙個dijkstra演算法的,ac!include 樣例可能的最大的邊數 define maxn 2000 初始化用到的最大值 define inf 100000 儲存城市與城市之間耗費時間的最小權值 intmat ma...