hdu 2066 乙個人的旅行

2021-08-20 10:41:45 字數 1520 閱讀 9388

題目意思:給出t條路,和草兒家相鄰的城市編號,以及草兒想去的地方的編號。問從草兒家到達草兒想去的地方的最短時間是多少。

一開始自己寫的只能處理單邊出發的情況,對於以下這幅圖,只能處理箭頭所示的方向,不能向下,於是不知道為什麼出現了百年難得一遇的runtime error(access_violation)!   

我的答案是inf。= =...。這個答案應該是2。之所以第一組資料能過,是因為它只需要從編號1走即能找到最小值,而上圖是需要從編號2走才可以找到最小值。

於是只能看discuss了。yk所講的無節操!!!看完大受啟發。

dijkstra 演算法本質上只能求乙個點到其他所有點的最短距離。那麼就需要把問題轉化為單源點。可以人為地認為編號為0的點是草家,由於跟草家直接相連的點距離為0,那麼可以把這些點歸為源點。至於草兒想去的地方有多個,把這多個點也人為地歸為終點,單獨設多個點n,把這些所謂的終點連到n點裡。(這個n點**有說)。那題目就轉化為從點0到點n的最短時間是多少。

題目中還有乙個需要注意的地方,這句話:a,b 之間可能有多條路。也就是說兩點之間相連的路有多條,我們需要選擇把最短的那條路的時間記錄下來。

還有就是tle 的情況了。if 迴圈裡面對map[i][j]初始化時,千萬不能等於maxn(1000 + 5)!tle了n次!!!

#include

#include

#include

#include

using namespace std;

const int inf = 1 << 20;  // inf 的設定一定要足夠的大

const int maxn = 1000 + 5;

int dist[maxn], map[maxn][maxn], vis[maxn];

int t, s, d, n;

void init()

int st, end, time;

n = 0;

for (int i = 0; i < t; i++)

n++;   // 假設是理想中的終點(比最大的頂點大1)的編號

for (int i = 0; i < s; i++)

for (int i = 0; i < d; i++)

}void dijkstra()

vis[u] = 1;

for (int j = 0; j <= n; j++)}}

int main()

return 0;

}

hdu 2066 乙個人的旅行

我覺得這題應該用floyd演算法會更好一點吧,猜的,還沒學,囧.我是用dijstra暴力水過.嗯開始學floyd code include include include include include include include include include include include ...

Hdu 2066 乙個人的旅行

最短路問題 dijkstra 分析 1 本題的起始點和終點不唯一。假設有一點起始點離全部的相鄰城市的距離都是1,有一點終點離全部的想要去的目的地的距離也都是1,則將dijkstra出來的值減2即可。2 兩個城市之間的路不唯一,可有多條路,所以在輸入的時候做一下判斷,選取最小的。ac include ...

HDU2066 乙個人的旅行

problem description input 輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個 接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時 1 a,b 1000 a,b 之間可能有多條路 接...