HUD 3790 最短路徑問題

2021-09-10 01:31:29 字數 990 閱讀 9303

最短路徑問題

這道題是最短路問題的高階版本

在求最短路的基礎上增加了求花費這一操作

就是如果說存在多條最短長度相同的路徑,選擇花費最少的那一條路

做法就是再定義乙個存圖的二維陣列,只不過存的不是兩點之間的距離了,而是兩點之間的花費

我覺得這不得用兩個佇列嗎??如果說存在兩條路,它們的路徑上的點除了起點和終點相同,其餘的都不相同,一條路的前半部分花費多,後半部分花費少,另一條路的前半部分花費少,後半部分的花費多,總的花費是第一條路的少

還需要考慮的問題是如何確定多個最短路

之前的最短路乙個選乙個就行了

這道題就是在最短路**的基礎上新增以下**,如果說找到了到下乙個點更短的路,就更新那個點的最短距離和花費

如果說存在多條到這個點相同且最小的長度的路徑,則更新這幾條路的最小花費

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...