#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
int n,m,k;
char graph[55][55];
int dx[55],dy[55];
bool vis[55][55];
int step[55][55];
int sx,sy;
struct node{
int x,y;
int step;
};
void bfs(){
queue<node> q;
node tmp;
tmp.x = sx;
tmp.y = sy;
graph[sx][sy] = 'X';
int res = 0;
tmp.step = 0;
q.push(tmp);
while(!q.empty()){
node cur = q.front();
q.pop();
for(int i=0;i<k;i++){
int xx = cur.x+dx[i];
int yy = cur.y+dy[i];
if(xx>=0 && xx<n && yy>=0 && yy<m && graph[xx][yy]=='.'){
graph[xx][yy] = 'X';
node t;
t.x = xx;
t.y = yy;
t.step = cur.step+1;
step[xx][yy] = t.step;
q.push(t);
res = max(res,t.step);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(graph[i][j]=='.'){
printf("-1\n");
return ;
}
}
}
printf("%d\n",res);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",graph[i]);
scanf("%d%d",&sx,&sy);
memset(vis,false,sizeof(vis));
memset(step,0,sizeof(step));
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d%d",dx+i,dy+i);
}
bfs();
return 0;
}
牛客 网易笔试题2017 简单bfs
最新推荐文章于 2023-11-02 05:03:00 发布