pythonでの幅優先探索(BFS) マップが入力で与えられているとき
・問題
atcoder.jp
・参考:
スタックとキューを極める! 〜 考え方と使い所を特集 〜 - Qiita
・注意点:参考文献を見れば基本大丈夫だが、スタートとゴールの座標をマイナス1する必要がある。(sx-=1,,,のように)
・実装:
from collections import deque H,W=map(int,input().split()) sx,sy=map(int,input().split()) gx,gy=map(int,input().split()) #1つ下げる sx-=1 sy-=1 gx-=1 gy-=1 field=[] for _ in range(H): field.append(list(input())) dx=[1,0,-1,0] dy=[0,1,0,-1] #スタートからの距離がdist dist=[[-1 for _ in range(W)] for _ in range(H)] #print(dist) que=deque() #スタートはdist=0、queにスタートを追加 dist[sx][sy]=0 que.append((sx,sy)) #print(que) #queがからになるまでやる while len(que)!=0: x,y=que.popleft() #queの先頭のペアを取り出す #移動 for i in range(4): next_x=x+dx[i] next_y=y+dy[i] #場外はスルー、#のときも if next_x<0 or next_x>=H or next_y<0 or next_y>=W: continue if field[next_x][next_y]=='#': continue #未探索ならqueにいれる if dist[next_x][next_y]==-1: que.append((next_x,next_y)) #距離の更新 dist[next_x][next_y]=dist[x][y]+1 print(dist[gx][gy])