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