P1683 求调
# include <bits/stdc++.h>
using namespace std;
char m[21][21];
struct Now{
int step,x,y;
};
int mx,h,w,sx,sy,maxx,maxy;
bool vis[21][21];
queue<Now>q;
void bfs(int bx,int by){
Now tmp;
tmp.x=bx,tmp.y=by,tmp.step=1;
vis[bx][by]=1;
q.push(tmp);
while(!q.empty()){
tmp=q.front();
q.pop();
int nx=tmp.x,ny=tmp.y;
if(!vis[nx+1][ny]&&nx<=h&&m[nx+1][ny]!='#')q.push((Now){tmp.step+1,nx+1,ny}),vis[nx+1][ny]=1;
if(!vis[nx-1][ny]&&nx>0&&m[nx-1][ny]!='#')q.push((Now){tmp.step+1,nx-1,ny}),vis[nx-1][ny]=1;
if(!vis[nx][ny+1]&&ny<=w&&m[nx][ny+1]!='#')q.push((Now){tmp.step+1,nx,ny+1}),vis[nx][ny+1]=1;
if(!vis[nx][ny-1]&&ny>0&&m[nx][ny-1]!='#')q.push((Now){tmp.step+1,nx,ny-1}),vis[nx][ny-1]=1;
mx=max(mx,tmp.step);
}
}
int main(){
cin>>w>>h;
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++){
cin>>m[i][j];
if(m[i][j]=='@')sx=i,sy=j;
}
bfs(sx,sy);
cout<<mx;
}