天天看點

java地鐵線路規劃_地鐵線路規劃——簡單分析

計算地鐵線路最短路徑

我們要将地鐵線路資訊等用一個文本檔案的形式儲存起來,應儲存的資訊應包括地鐵線路名稱、各個地鐵站點的名稱以及車站換乘資訊,使得應用程式可以通過讀取這個檔案,就能掌握關于北京地鐵線路的所有資訊。

需求1:

實作一個支援顯示地鐵線路與計算換乘的程式(對于Java項目,Main方法所在檔案名需為 subway.java)。之後,使用者可以通過指令行啟動這個程式。程式在啟動時,會讀取不同指令對應的指令行參數。對于地鐵線路資訊圖,我們約定它采用參數 -map 作為标志。程式啟動時需要通過讀取 -map 參數來獲得對應的自定義地鐵檔案(命名為 subway.txt),進而得到地鐵線路圖的資訊。一個調用應用java程式的示例如下:

java subway -map subway.txt

需求2:

現在程式裡已經與地鐵檔案解耦了,那麼我們就可以在這個的基礎上做一些基礎的查詢操作。比如說,使用者希望查詢指定地鐵線經過的站點。這樣,在應用程式需要支援一個新的指令行參數 -a,它指定了使用者希望查詢的地鐵線路。這樣,在給定地鐵線路時,你的程式就需要能夠從線路的起始站點開始,依次輸出該地鐵線經過的所有站點,直到終點站。輸出的檔案我們使用 -o 指令行參數來指定。一個調用應用java程式的示例如下:

java subway -a 1号線 -map subway.txt -o station.txt

需求3:

如果使用者希望坐地鐵,他希望能通過最少的站數從出發點到達目的地,這樣就可以在指令行中以 -b 參數加兩個地鐵站點名稱分别作為出發與目的,比如使用者希望知道 洪湖裡 到複興路 之間的最短路線是怎樣的,他就可以使用如下指令讓程式将結果寫入 routine.txt 中。

subway.exe -b 洪湖裡 複興路 -map subway.txt -o routine.txt

你的程式将計算從出發到目的站點之間的最短(經過的站點數最少)路線,并輸出經過的站點的個數和路徑(包括出發與目的站點)。注意,如果需要換乘,請在換乘站的下一行輸出換乘的線路。上面樣例的輸出就會存入 routine.txt 檔案中,檔案内容如下:

3

洪湖裡

西站

6号線

複興路

值得注意的是,請嚴格按照要求輸出,不要增加任何額外輸出或提示語。

問題分析:其實就是在無向圖中求兩個節點間的最短路徑。

思路:Dijkstra算法步驟如下

1:周遊所有節點找到未通路過的節點中累積權值(其實就是從源節點到目前節點的路徑值和)最小的(設為A)。

2:周遊該節點所有可達邊(連通到目标節點B),如果節點A累積權值加可達邊權值小于目标節點B自身的累積權值,則對目标節點B進行更新。

3:将節點A設定為已通路。

4:重複(1)直到所有節點均通路完畢。