最優乘車(資訊學奧賽一本通 T1377)

2021-10-19 11:08:58 字數 1840 閱讀 4147

題目描述

h 城是乙個旅遊勝地,每年都有成千上萬的人前來觀光。

為方便遊客,巴士公司在各個旅遊景點及賓館,飯店等地都設定了巴士站並開通了一些單程巴士線路。

每條單程巴士線路從某個巴士站出發,依次途經若干個巴士站,最終到達終點巴士站。

一名旅客最近到 h 城旅遊,他很想去 s 公園遊玩,但如果從他所在的飯店沒有一路巴士可以直接到達 s 公園,

則他可能要先乘某一路巴士坐幾站,再下來換乘同一站台的另一路巴士, 這樣換乘幾次後到達 s 公園。

現在用整數 1, 2, …n 給 h 城的所有的巴士站編號,約定這名旅客所在飯店的巴士站編號為 1,s 公園巴士站的編號為 n。

寫乙個程式,幫助這名旅客尋找乙個最優乘車方案,使他在從飯店乘車到 s 公園的過程中換車的次數最少。

輸入格式

第一行有兩個數字 m 和 n,表示開通了 m 條單程巴士線路,總共有 n 個車站。

從第二行到第 m 行依次給出了第 1 條到第 m 條巴士線路的資訊,其中第 i + 1 行給出的是第 i 條巴士線路的資訊,

從左至右按執行順序依次給出了該線路上的所有站號相鄰兩個站號之間用乙個空格隔開。

輸出格式

如果無法乘巴士從飯店到達 s 公園,則輸出n0,否則輸出你的程式所找到的最少換車次數,

換車次數為 0 表示不需換車即可到達。

輸入樣例

3 76 7

4 7 3 6

2 1 3 5

輸出樣例

2資料範圍

1 < n ≤ 500

1 ≤ m ≤ 100

題解

dijkstra(樸素版):

解題思路:本題的難點在於讀入與建圖;

首先換乘次數 = 乘車次數 - 1

讀入:由於不確定每條路線會途經幾個車站,所以可以用stringstream處理讀入;

建圖:以樣例4 7 3 6為例,分別將4 ~ 74 ~ 34 ~ 67 ~ 37 ~ 63 ~ 6連一條邊,權值為 1;

表示從車站4做到車站7只要乘一次車,表示從車站4做到車站3只要乘一次車 ……

#include

#include

#include

using

namespace std;

const

int n =

510;

int n, m;

bool st[n]

;int dist[n]

, g[n]

[n], station[n]

;void

dijkstra()

}int

main()

dijkstra()

;if(dist[n]

==0x3f3f3f3f

) cout <<

"no"

<< endl;

else cout << dist[n]-1

<< endl;

return0;

}

資訊學奧賽一本通1349「最優佈線問題」

下面是題目描述 題目描述 學校有n臺計算機,為了方便資料傳輸,現要將它們用資料線連線起來。兩台計算機被連線是指它們有資料線連線。由於計算機所處的位置不同,因此不同的兩台計算機的連線費用往往是不同的。當然,如果將任意兩台計算機都用資料線連線,費用將是相當龐大的。為了節省費用,我們採用資料的間接傳輸手段...

計算(資訊學奧賽一本通 T1356)

題目描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9,求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入格式 共 1 行,為乙個算式。輸出格式 共 1 行,就是密碼。輸入樣例 1 3 2 7 2 69 2 ...

均值(資訊學奧賽一本通 T1060)

題目描述 給出一組樣本資料,包含n個浮點數,計算其均值,精確到小數點後4位。輸入 輸入有兩行,第一行包含乙個整數n n小於100 代表樣本容量 第二行包含n個絕對值不超過1000的浮點數,代表各個樣本資料。輸出 輸出一行,包含乙個浮點數,表示均值,精確到小數點後4位。輸入樣例 21.0 3.0 輸出...