7 10 旅遊規劃 25分 (c )

2021-10-25 04:15:24 字數 1675 閱讀 9406

7-10 旅遊規劃 (25分)

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

輸入格式:

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

我對**的邏輯上做了小的修改。

如果有時間的話,我會再加注釋

反正整體就是dijkstra演算法,魯老師又不讓用stl(好像有priority_queue可以優化時間複雜度)(我到現在好像還不太理解dijkstra的思路,啊啊啊)

就直接用鄰接矩陣的儲存結構,就是複雜度好像是o(n^2)

#include

#include

using

namespace std;

const

int mvnum =

1e3;

const

int inf =

1e5;

//節點到源節點的最短距離,是否被訪問,最小花費

struct

vertices[mvnum]

;struct

mgraph[mvnum]

[mvnum]

;//網的初始權值是無窮

//初始化邊的集合

void

initgraph

(int n)

}void

inputgraph

(int m)

}void

initvertices

(int n,

int s)

vertices[s]

.visit =1;

vertices[s]

.len =0;

vertices[s]

.cost =0;

}void

dijkstra

(int n,

int s)

//本題應該不存在這種情況 可不寫(寫了更邏輯更完整)

if(minver == n)

break

; vertices[minver]

.visit =1;

for(

int i =

0; i < n; i++

)else

if(vertices[i]

.len == vertices[minver]

.len + mgraph[minver]

[i].len)}}

}}intmain()

旅遊規劃(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 ...