Python使用廣度優(yōu)先搜索遍歷混亂地鐵問題
混亂地鐵問題
【問題描述】
在某個城市中地鐵網(wǎng)極度混亂。一條地鐵線路上有n個地鐵站,分別編號為1到n。地鐵線路上的每一個站都會??康罔F,每一個地鐵站上都有一個數(shù)字m,代表從此站出發(fā)乘客必須乘坐的站數(shù)。每個地鐵站都有通往兩個方向的地鐵。因此可以向編號大的方向前進(jìn)m站,也可以向編號小的方向前進(jìn)m站。但如果前進(jìn)后超出了地鐵站的范圍,則該地鐵不可被乘坐。例如編號為1的地鐵上的數(shù)字為3,那么在該地鐵站上車,可以向正方向坐到4號地鐵站。但不能反方向坐車到-2號地鐵站,因為-2號地鐵站不存在?,F(xiàn)在乘客從A號地鐵站出發(fā),想要到達(dá)B號地鐵站,求他能否到達(dá),最少要搭乘多少次地鐵?
【輸入形式】
- 第一行輸入地鐵站的個數(shù)
- 第二行依次輸入每個地鐵站的數(shù)字,以空格隔開
- 第三行輸入地鐵站A和B,以空格隔開
【輸出形式】
地鐵站A到B最少要搭乘地鐵的次數(shù)
【樣例輸入】
5
2 4 1 2 3
1 2
【樣例輸出】
2
程序設(shè)計
n=int(input())
lst1=[int(i) for i in range(n)]
lst2=list(map(int,input().split()))
start,end=map(int,input().split())
def BFS(lst1,lst2,start,end): #廣度優(yōu)先搜索遍歷
count=0 #計算達(dá)到終點所需乘坐地鐵的次數(shù)
visited=[0 for i in range(n)] #設(shè)置標(biāo)志列表
Queue=[] #設(shè)置隊列,用于廣度優(yōu)先搜索遍歷
Queue.append(start-1) #將起點放入隊列
flag=1 #用于改變方向
while Queue: #開始循環(huán)遍歷
t=Queue.pop(0) #出隊
for i in range(2): #分別向左右兩個方向走
flag=-1*flag #改變方向
new=lst1[t]+flag*lst2[t] #到達(dá)的新的地鐵站的下標(biāo)
if new<0 or new>=n: #檢查是否合法
continue
if new>=0 or new<n:
Queue.append(new) #若合法,就放入隊列中
visited[new]=1 #標(biāo)記一下
count+=1 #乘坐的地鐵次數(shù)
if visited[end-1]==1: #如果終點被標(biāo)記了,說明已經(jīng)到終點了
return count
return 0
print(BFS(lst1,lst2,start,end)) 總結(jié)
廣度優(yōu)先搜索遍歷主要通過一個隊列來實現(xiàn),具體的格式為:
Queen.append() while Queen: ? ? t=Queen.pop()? ? ? if …… ? ? ? ? Queen.append()
先將第一個元素放入隊列中,然后將第一個元素取出,并找到合法的所有元素放入隊列中,再挨個從隊列中取出,直到隊列為空,表示所有合法的元素都已經(jīng)被遍歷過了。
到此這篇關(guān)于Python使用廣度優(yōu)先搜索遍歷混亂地鐵問題的文章就介紹到這了,更多相關(guān)Python廣度優(yōu)先搜索遍歷混亂地鐵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python提取特定時間段內(nèi)數(shù)據(jù)的方法實例
今天小編就為大家分享一篇關(guān)于Python提取特定時間段內(nèi)數(shù)據(jù)的方法實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04
Python使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑
如果你需要在 Python 里進(jìn)行文件處理,那么標(biāo)準(zhǔn)庫中的os和os.path兄弟倆一定是你無法避開的兩個模塊,本文主要來和大家聊聊如何使用pathlib庫實現(xiàn)優(yōu)雅的處理路徑,感興趣的可以了解下2023-12-12
Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過程
這篇文章主要介紹了Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Python+AutoIt實現(xiàn)界面工具開發(fā)過程詳解
這篇文章主要介紹了Python+AutoIt實現(xiàn)界面工具開發(fā)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
pytorch動態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實現(xiàn)
這篇文章主要介紹了pytorch動態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解
最近在用Python,做一個小腳本,有個操作就是要把內(nèi)容換成數(shù)組對象再進(jìn)行相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于如何在Python中將字符串轉(zhuǎn)換為數(shù)組的相關(guān)資料,需要的朋友可以參考下2022-12-12
Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能
這篇文章主要介紹了Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

