地鐵的最短路徑

2022-08-27 21:51:15 字數 3225 閱讀 5268

專案介紹:

提供一副地鐵線路圖,計算指定兩站之間最短(最少經過站數)乘車路線;輸出指定地鐵線路的所有站點。以北京地鐵為例,地鐵線路資訊儲存在data.txt中,格式如下:

地鐵線路總數

線路名1 站名1 站名2 站名3 ...

線路名2 站名1 站名2 站名3 ...

線路名3 站名1 站名2 站名3 ......

1.需求分析

功能需求:根據使用者輸入的起點和終點,程式經過運算能得出兩站之間最短路徑,並列印出最短路徑經過的站點。

效能需求:地鐵站點為乙個城市的所有地鐵站點,能在1秒內計算出最短路徑。

介面需求:地鐵路線資料使用文字儲存,讀入資料介面需要能讀取並處理txt檔案。

2.實現語言

python

3.實現演算法

dijkstra

4、類職責劃分

讀入檔案,將txt資訊記錄在list佇列裡

file="c:\\users\\青朽\desktop\\地鐵最短路徑.txt"

"""讀入地鐵資訊檔案,對資料進行處理

"""data=dict()

with open(file, "rt", encoding="utf-8") as file:

n=int(file.readline())

for i in range(n):

value=""

line=file.readline().split()

for i in line[1:]:

value=value+i+" "

data[line[0]]=value

list=data

資料處理,將傳入的資料為每個地鐵站建立與之相鄰的鄰接表

def build_subway(**lines):

for key in lines.keys():

value = lines[key]

lines[key] = value.split()

stations = set()

for key in lines.keys():

stations.update(set(lines[key]))

system = {}

for station in stations:

next_station = {}

for key in lines:

if station in lines[key]:

line = lines[key]

idx = line.index(station)

if idx == 0:

next_station[line[1]] = key

elif idx == len(line) - 1:

next_station[line[idx - 1]] = key

else:

next_station[line[idx - 1]] = key

next_station[line[idx + 1]] = key

system[station] = next_station

return system

列印出鄰接表,可以判斷資料處理是否正確

main函式與使用者進行互動,通過使用者輸入選擇處理方式

def main():

flag = input("請輸入您要查詢的功能(a.查詢路線站點 b.查詢兩站之間最短路徑)")

if flag == "a":

path = input("請輸入您要查詢的路線名:")

print(list[path])

elif flag=="b":

start = input("請輸入起始站:")

end = input("請輸入終點站:")

print(shorter_path(start, end))

else:

print("請輸入正確查詢")

5、核心**運用bfs演算法,通過起始站終點站查詢最短路徑

def shorter_path(start, goal):

if start == goal:

return [start]

explored = set()

queue = [ [start] ]

while queue:

path = queue.pop(0)

s = path[-1]

for state, action in sub[s].items():

if state not in explored:

explored.add(state)

path2 = path + [action, state]

if state == goal:

return path2

else:

return

6、測試用例查詢路線站點

查詢兩站之間最短路徑

輸入錯誤報錯

7、**託管

完整**已上傳至github

8、總結

1).第一次接觸到了自己寫部落格,學會乙個新技能

2).檢視了很多相關部落格,發現python對有些專案解法很便捷

3).重新複習了bfs演算法,有了更深入的了解

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...

個人專案 北京地鐵最短路徑規劃

以下是北京地鐵線路總圖,本專案的受眾可以通過本軟體,獲得北京市地鐵出行最便捷,最快速的線路推薦。實現乙個幫助進行地鐵出行路線規劃的命令列程式。支援查詢線路的所有站點。支援查詢到某終止站點的途徑最少站點的路線。能正確處理輸入的引數,且具備一定健壯性 psppersonal software proce...

Codeup最短路徑 最短路徑問題

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t 起點s,...