7 1 旅遊規劃 25分 優先佇列

2021-10-02 14:29:52 字數 1524 閱讀 2901

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度、以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。

輸入格式:

輸入說明:輸入資料的第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

之前學了最短路徑的模板,用模板寫超時,而且不太對

這道題用優先佇列改進了,但是依舊出問題,發現之前在全域性初始化head[n]=;只是把head[0]賦為-1,用memset初始化就行,不過我沒用memset

這裡visit沒什麼用

還有一點不懂,就是那個比較函式,有大佬看到可以幫忙解答一下

bool operator < (const edge a) const

連續看了兩天才看明白,思路看不明白可以手動模擬,細節錯誤就很讓人頭大了,不過死磕還是能磕出來的

不過我做題細節錯誤超級多,慢慢改吧

#include

using

namespace std;

const

int n=

1e6;

const

int inf=

0x3f3f3f3f

;//無窮大,十進位制是1061109567,是10^9級別的

struct dis

dis[n]

;struct edge

}edge[n]

;int cnt=

0,head[n]

;//全域性初始化為0

bool visit[n]

;void

add(

int b,

int e,

int v,

int p)

void

dijkstra

(int s,

int d)

else

if(dis[y]

.d_v>dis[x]

.d_v+edge[i]

.value)}}

}int

main()

//初始化

for(

int i=

0;i)dijkstra

(s,d)

; cout<.d_v<<

" "<.d_p;

return0;

}

旅遊規劃(25 分)

最短路的乙個題目,不知道自己為什麼用spfa過不去,所以用了dij 自己做了一下優化,這個就是更新結點的時候需要注意一下,更新結點先判斷距離,然後判斷花費,有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間...

旅遊規劃 (25 分)

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 500 是城市...

5 9 旅遊規劃 25分

有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中nnn 2 n ...