第七周作業 TT 的旅行日記

2021-10-04 19:47:22 字數 2502 閱讀 6295

一、題目

眾所周知,tt 有乙隻魔法貓。

今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。 tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車票,可以坐一站商業線。假設 tt 換乘的時間忽略不計,請你幫 tt 找到一條去喵星機場最快的線路,不然就要誤機了!

二、輸入

輸入包含多組資料。每組資料第一行為 3 個整數 n, s 和 e (2 ≤ n ≤ 500, 1 ≤ s, e ≤ 100),即貓貓快線中的車站總數,起點和終點(即喵星機場所在站)編號。

下一行包含乙個整數 m (1 ≤ m ≤ 1000),即經濟線的路段條數。

接下來有 m 行,每行 3 個整數 x, y, z (1 ≤ x, y ≤ n, 1 ≤ z ≤ 100),表示 tt 可以乘坐經濟線在車站 x 和車站 y 之間往返,其中單程需要 z 分鐘。

下一行為商業線的路段條數 k (1 ≤ k ≤ 1000)。

接下來 k 行是商業線路段的描述,格式同經濟線。

所有路段都是雙向的,但有可能必須使用商業車票才能到達機場。保證最優解唯一。

三、輸出

對於每組資料,輸出3行。第一行按訪問順序給出 tt 經過的各個車站(包括起點和終點),第二行是 tt 換乘商業線的車站編號(如果沒有使用商業線車票,輸出"ticket not used",不含引號),第三行是 tt 前往喵星機場花費的總時間。

本題不忽略多餘的空格和製表符,且每一組答案間要輸出乙個換行。

四、樣例輸入輸出

input

4 1 4

41 2 2

1 3 3

2 4 4

3 4 5

12 4 3

output

1 2 425

五、解題思路

迪傑斯特拉演算法。

對乙個點和它的鄰接點進行分析,如果經過兩點之間的邊能夠縮短距離,更新dis陣列。需要遍歷完所有的點。

將每個車站看成兩個點,分為兩層,當選擇商業線後,會從乙個層跨越到另乙個層,並且不能返回,由此實現只選擇一條商業線。使用鏈式前向星儲存邊,使用最小堆結構實現取邊最小,每次拿出的是最小的邊,優化演算法的複雜度。在更新dis陣列時,更新path陣列記錄位置,實現路徑的記錄,最後使用遞迴輸出。

注意:分析可知,該題給出的邊為雙向邊,新增時要注意。最小堆結構使用優先佇列實現,注意priority_queue預設最大堆,存邊時取反,即可實現最小堆。

六、樣例**

#include

#include

#include

#include

using

namespace std;

#define inf 5*1e8

int n,s,e;

struct edge

ed[10000];

int head[

1010];

int tot;

void

add(

int x,

int y,

int w)

int vis[

1010];

int path[

1010];

int dis[

1010];

int bl;

priority_queueint,

int>

> q;

void

dijkstra

(int s)

dis[s]=0

; path[s]=0

; q.

push

(make_pair(0

,s))

;while

(q.size()

)}}}

void

find

(int m)

else cout<" ";

if(m>

505&&path[m]

<

505) bl=path[m];}

intmain()

scanf

("%d"

,&num)

;for

(int i=

0;i)dijkstra

(s);

if(pt==

1) cout

if(dis[e]

>dis[e+

505]

)else

}return0;

}

TT 的旅行日記(Dijkstra

眾所周知,tt 有乙隻魔法貓。今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一張商業線車...

第七周作業作業

1 自建yum倉庫,分別為網路源和本地源 建立yum配置檔案,類似如下 base name base baseurl file misc cd gpgcheck 0 epel name epel baseurl gpgcheck 0 enabled 1 本地源 以前自己整理的 2 編譯安裝http2...

第七周作業

書中習題1 說說下列程式的執行過程和運算結果 include includeusing namespace std double squ double x 函式原形 int main 主函式 書2,不用庫函式,求整數次冪 3.程式設計實現輸入兩個4x5矩陣和5x3矩陣,定義函式並在主函式中呼叫計算它...