有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度、以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。
輸入格式:
輸入說明:輸入資料的第1行給出4個正整數n、m、s、d,其中n(2≤n≤500)是城市的個數,順便假設城市的編號為0~(n−1);m是高速公路的條數;s是出發地的城市編號;d是目的地的城市編號。隨後的m行中,每行給出一條高速公路的資訊,分別是:城市1、城市2、高速公路長度、收費額,中間用空格分開,數字均為整數且不超過500。輸入保證解的存在。
輸出格式:
在一行裡輸出路徑的長度和收費總額,數字間以空格分隔,輸出結尾不能有多餘空格。
輸入樣例:
4 5 0 3
0 1 1 20
1 3 2 30
0 3 4 10
0 2 2 20
2 3 1 20
輸出樣例:
3 40
解題思路:
①將路徑長度和收費金額單獨存乙個陣列
②先比較路徑大小
③在路徑長度相等的條件下,比較花費更小的,將其花費更新為某個點到這個點加花費金額的邊權之和
code:
#include
#include
#include
#include
using
namespace std;
using pii=pair<
int,
int>
;struct edge
;vector>g;
vector<
int>d;
//長度
vector<
int>cost;
//金額
int n,m,s,d;
void
dijkstra
(int s));
//放入優先佇列 方便找長度最小的節點 時間複雜度為nlogn
while
(!q.
empty()
));//放入佇列 }if
(d[i.to]
==(i.len+d[x]
)&&cost[i.to]
>
(cost[x]
+i.w))}
}}intmain()
);g[b]
.push_back()
;}dijkstra
(s);
cout<<<
" "<;//輸出終點的長度值 花費即可
return0;
}
旅遊規劃 Dijkstra演算法
終於又遇到了一遍過的題目了,果然只要不和007對上我還是可以的。有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入說明 輸入資料的第...
7 36 旅遊規劃 (25 分 Dijkstra
有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 500 是城市...
pta7 7旅遊規劃(dijkstra演算法)
題意 給n給城市,m條公路,公路是雙向的,起點s,終點d,並給出每條公路連線的兩個city的編號以及路費,求s到d的最短距離,若具有最短距離的路線不止一條,求出路費最少的一條。思路 單源最短路徑問題,利用dijkstra演算法求出s到其他點的最短路徑,只不過加乙個路費cost,在dis相等的情況下,...