#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct Data{ int y,x,cost; Data(){} Data(int _y,int _x,int _cost){ y=_y; x=_x; cost=_cost; } bool operator<(const Data &a)const{ return cost>a.cost; } }; const int dy[4]={-1,0,1,0},dx[4]={0,1,0,-1}; int main(){ int W,H; char fld[20][20]; priority_queue q; cin>>W>>H; for(int i=0;i>fld[i][j]; if(fld[i][j]=='.' && q.empty()) q.push(Data(i,j,0)); } } Data q_c; bool used[20][20]={}; while(!q.empty()){ q_c = q.top(); q.pop(); //printf("%d,%d,%d\n",q_c.x,q_c.y,q_c.cost); if(used[q_c.y][q_c.x]==true) continue; used[q_c.y][q_c.x] = true; if(fld[q_c.y][q_c.x]=='.' && q_c.cost>0){ printf("%d\n",q_c.cost); break; } for(int i=0;i<4;i++){ int ny,nx; ny = q_c.y+dy[i]; nx = q_c.x+dx[i]; if(ny<0 || H<=ny || nx<0 || W<=nx) continue; Data q_d = Data(ny,nx,q_c.cost); if(fld[ny][nx]=='#') q_d.cost++; q.push(q_d); } } return 0; }