#include using namespace std; typedef long long ll; #define rep(i,n) for(i=0;i>w >>h; vector f(h); rep(i,h) cin >>f[i]; //最初に見つかった点 point a; bool found=false; rep(i,h){ rep(j,w){ if(f[i][j]=='.'){ a.y=i; a.x=j; found=true; break; } } if(found) break; } //ここからBFS queue que; que.push(a); f[a.y][a.x]='a'; while (!que.empty()){ point v=que.front(); que.pop(); rep(i,4){ int nx=v.x+dx[i], ny=v.y+dy[i]; if(0<=nx&&nx q; point st; st.x=X; st.y=Y; q.push(st); while(!q.empty()){ point v=q.front(); q.pop(); rep(i,4){ int nx=v.x+dx[i], ny=v.y+dy[i]; if(0<=nx&&nxd[v.y][v.x]+1){ d[ny][nx]=d[v.y][v.x]+1; if(f[ny][nx]=='b'){ ans=min(ans,d[ny][nx]-1); //printf("%d, %d %d\n",ans,ny,nx); } else{ point tmp; tmp.x=nx; tmp.y=ny; q.push(tmp); } } } } } } std::cout << ans << std::endl; return 0; }