演算法學習筆記10 BFS寬度優先搜尋

2021-08-07 03:47:48 字數 2198 閱讀 2693

定義乙個二維陣列n*m

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。入口點為[0,0],既第一空格是可以走的路。

#coding=utf-8

m,n=map(int,raw_input().split())

a=for i in range(m):

v=[[0

for i in range(n)] for j in range(m)]#記錄訪問沒有

dirc=[[0,1],[0,-1],[1,0],[-1,0]]#四個方向

step=#儲存每一步的座標

v[0][0]=1

i,j=step[-1]

k=0while k<4:

x=i+dirc[k][0]

y=j+dirc[k][1]

if x>=0

and xand y>=0

and yand

a[y][x]==0

and v[y][x]==0:#檢查越界,通路,訪問記錄

v[y][x]=1

i=xj=y#替換當前座標

k=-1

if x==n-1

and y==m-1:#如果順利到達終點

break

if k==3:#如果四個方向都嘗試過說明此路不通

step.pop()

k+=1

for k in range(len(step)):

print '(%d,%d)' %(step[k][1],step[k][0])

小青蛙有一天不小心落入了乙個地下迷宮,小青蛙希望用自己僅剩的體力值p跳出這個地下迷宮。為了讓問題簡單,假設這是乙個n*m的格仔迷宮,迷宮每個位置為0或者1,0代表這個位置有障礙物,小青蛙達到不了這個位置;1代表小青蛙可以達到的位置。小青蛙初始在(0,0)位置,地下迷宮的出口在(0,m-1)(保證這兩個位置都是1,並且保證一定有起點到終點可達的路徑),小青蛙在迷宮中水平移動乙個單位距離需要消耗1點體力值,向上爬乙個單位距離需要消耗3個單位的體力值,向下移動不消耗體力值,當小青蛙的體力值等於0的時候還沒有到達出口,小青蛙將無法逃離迷宮。現在需要你幫助小青蛙計算出能否用僅剩的體力值跳出迷宮(即達到(0,m-1)位置)。

#coding=utf-8

import sys

m,n,p=map(int,raw_input().split())

a=for i in range(m):

v=[[0

for i in range(n)]for j in range(m)]#visit

d=[[0,1],[0,-1],[1,0],[-1,0]]#direction

c=[1,1,0,3]#cost

q=s=#step

v[0][0]=1

#(0,0)has been visited

i,j=s[-1]#init position

k=0flag=false

while k<4:#bfs

x=i+d[k][0]

y=j+d[k][1]

ifx>=0

andy>=0

andx

andy

and a[x][y]==1

and v[x][y]==0:

v[x][y]=1

p-=q[-1]

i=xj=y

k=-1

if p<0:

flag=true

break

ifx==0

andy==n-1:

break

if k==3:

s.pop()

p+=q[-1]

q.pop()

i=s[-1][0]

j=s[-1][1]

k=-1

k+=1

if flag:

print

'can not escape!'

else:

for k in range(len(s)-1):

print

'[%d,%d],'

%(s[k][0],s[k][1]),

sys.stdout.softspace=0

print

'[%d,%d]'

%(s[len(s)-1][0],s[len(s)-1][1])

演算法學習筆記 寬度優先搜尋(BFS)

寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...

《演算法筆記》廣度優先搜尋 BFS 初步學習

bfs一般由佇列實現,且總是按層次的順序進行遍歷,其基本寫法如下 void bfs int s 下面是對每乙個步驟的說明 1.定義佇列q,並將起點s入隊 2.寫乙個while迴圈,迴圈條件是佇列q非空 3.在while迴圈裡,先取出隊首元素top,然後訪問他 訪問可以是任何事情,例如輸出 訪問完將其...

演算法學習 DFS與BFS

一。深度優先搜尋 深度優先搜尋 是一種列舉所有完整路徑以遍歷所有情況的搜尋方法。類似樹的先根遍歷。簡單來說,就是一直往深處走,直到找到解或走不下去了為止。可以使用棧來實現,用棧儲存未被檢測的結點,結點按照深度優先的次序被訪問並依次被壓入棧中,並以相反的次序出站進行新的檢測。也可以使用遞迴實現,相對 ...