HDU 3790 最短路徑 spfa

2021-08-04 22:35:43 字數 919 閱讀 5517

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。

input

輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點。n和m為0時輸入結束。

(19 11

先是最短路徑然後是最短時間,用spfa或dijkstra求最短路徑,在對路徑鬆弛的時候加上對時間的比較,如果從a經過c到b比從a直接到b路徑要短,就進行一次路徑和時間的鬆弛,

如果路徑相同,還要判斷時間是否更短

,如果是就要對時間鬆弛。

#include #include #include #include using namespace std;

const int m = 1005;

const int inf = 0x3f3f3f3f;

struct node

;vectoradj[m];

int dis[m], tim[m];

int n, m;

bool bo[m];

void spfa(int st)

tim[st] = dis[st] = 0;

q.push(st);

while(!q.empty())

}else if(dis[it->num]==dis[t]+it->cost)

if(!bo[it->num])

}} }

}int main()

scanf("%d%d", &s, &t);

spfa(s);

printf("%d %d\n", dis[t], tim[t]);

} return 0;

}

HDU3790(最短路徑)

題意 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。解題思路 這是最短路問題的變形,以前做的只是求兩點之間的最短距離,現在除了距離最短,在此基礎上增加了花費最少。用弗洛伊德演算法同樣可以求解。注意 ...

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