最短路徑問題
這道題是最短路問題的高階版本
在求最短路的基礎上增加了求花費這一操作
就是如果說存在多條最短長度相同的路徑,選擇花費最少的那一條路
做法就是再定義乙個存圖的二維陣列,只不過存的不是兩點之間的距離了,而是兩點之間的花費
我覺得這不得用兩個佇列嗎??如果說存在兩條路,它們的路徑上的點除了起點和終點相同,其餘的都不相同,一條路的前半部分花費多,後半部分花費少,另一條路的前半部分花費少,後半部分的花費多,總的花費是第一條路的少
還需要考慮的問題是如何確定多個最短路
之前的最短路乙個選乙個就行了
這道題就是在最短路**的基礎上新增以下**,如果說找到了到下乙個點更短的路,就更新那個點的最短距離和花費
如果說存在多條到這個點相同且最小的長度的路徑,則更新這幾條路的最小花費
for(int i=1;i<=n;i++)else if(!vis[i]&&dis[i]==mp[k][i].x+dis[k]);
p mp[maxn][maxn];
bool vis[maxn];
int dis[maxn];
int cost[maxn];
int n,m;
int init()
else
} }}int dijkstra(int a)else if(!vis[i]&&dis[i]==mp[k][i].x+dis[k])
init();
int a,b,a1,b1,c,d;
for(int i=0;i>a1>>b1>>c>>d;
// mp[a][b].x=c;
// mp[a][b].y=d;
if(mp[a1][b1].x>c)else if(mp[a1][b1].x==c)
}} cin>>a>>b;
dijkstra(a);
// for(int i=1;i<=n;i++)
cout<}}
3790 最短路徑問題
問題 problem description 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,...
hdu3790 最短路徑問題
wa了無數次,終於過了,還是dijkstra,只不過在距離,相同時,多判斷一下時間。注意重邊!include include include define m 0x7fffffff using namespace std struct p 2000 struct c 1020 1020 int vi...
HDU 3790 最短路徑問題
hdu 3790 最短路徑問題 單源最短路勁,更新路勁時要更新花費 include include include includeusing namespace std define inf 0x7fffffff int n,m int map 1005 1005 int cost 1005 100...