atcoder Darker and Darkerの勉強
・問題
atcoder.jp
・参考
AtCoder AGC 033 A - Darker and Darker (緑色, 300 点) - けんちょんの競プロ精進記録
・考えたこと:DFSかBFSを使うことは分かったが具体的なやり方は思いつかなかった。上の記事を参考にして、スタートを'#'としてbfsをする。'#'からの距離distが最大のものが答えとすれば良いということが分かった。
・注意点:pypyで提出してください。
・実装例:
from collections import deque H,W=map(int,input().split()) 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)] que=deque() #スタート(#)の座標を求める for i in range(H): for j in range(W): if field[i][j]=='#': sx=i sy=j dist[sx][sy]=0 que.append((sx,sy)) ans=0 #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 #未探索ならqueにいれる if dist[next_x][next_y]==-1: que.append((next_x,next_y)) #距離の更新 dist[next_x][next_y]=dist[x][y]+1 for i in range(H): for j in range(W): ans=max(ans,dist[i][j]) print(ans)