專案介紹:
提供一副地鐵線路圖,計算指定兩站之間最短(最少經過站數)乘車路線;輸出指定地鐵線路的所有站點。以北京地鐵為例,地鐵線路資訊儲存在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,...