
#include<stdio.h>
#include<string.h>
#define MAXN 101
int vis[MAXN][MAXN];
int d[MAXN][MAXN];
struct GRASS{int x,y;}q[MAXN*MAXN];
int tail=0,head=0;
void enq(int x,int y)
{
q[tail].x=x,q[tail].y=y;
tail++;
return;
}
int deq()
{
int key=head;
head++;
return key;
}
const int nx[8]={-1,-1,-1,0,0,1,1,1};
const int ny[8]={-1,0,1,-1,1,-1,0,1};
int bfs(int x0,int y0)
{
int week=-1;
int newx,newy,key,i;
int x,y;
vis[x0][y0]=0;
d[x0][y0]=0;
enq(x0,y0);
while(head<tail)
{
key=deq();
x=q[key].x,y=q[key].y;
for(i=0;i<8;i++)
{
newx=x+nx[i];
newy=y+ny[i];
if(newx>0&&newy>0&&vis[newx][newy]==1)
{
vis[newx][newy]=0;
d[newx][newy]=d[x][y]+1;
if(d[newx][newy]>week) week=d[newx][newy];
enq(newx,newy);
}
}
vis[q[key].x][q[key].y]=-1;
}
return week;
}
int main()
{
memset(vis,-1,sizeof(vis));
memset(d,-1,sizeof(d));
tail=0,head=0;
int x,y,x0,y0,week;
int i,j;
char grass;
scanf("%d%d%d%d",&y,&x,&y0,&x0);
for(i=x;i>0;i--)
for(j=1;j<=y;j++)
{
scanf("%c",&grass);
if(grass=='.') vis[i][j]=1;
}
week=bfs(x0,y0);
printf("%d",week);
return 0;
}
#include<string.h>
#define MAXN 101
int vis[MAXN][MAXN];
int d[MAXN][MAXN];
struct GRASS{int x,y;}q[MAXN*MAXN];
int tail=0,head=0;
void enq(int x,int y)
{
q[tail].x=x,q[tail].y=y;
tail++;
return;
}
int deq()
{
int key=head;
head++;
return key;
}
const int nx[8]={-1,-1,-1,0,0,1,1,1};
const int ny[8]={-1,0,1,-1,1,-1,0,1};
int bfs(int x0,int y0)
{
int week=-1;
int newx,newy,key,i;
int x,y;
vis[x0][y0]=0;
d[x0][y0]=0;
enq(x0,y0);
while(head<tail)
{
key=deq();
x=q[key].x,y=q[key].y;
for(i=0;i<8;i++)
{
newx=x+nx[i];
newy=y+ny[i];
if(newx>0&&newy>0&&vis[newx][newy]==1)
{
vis[newx][newy]=0;
d[newx][newy]=d[x][y]+1;
if(d[newx][newy]>week) week=d[newx][newy];
enq(newx,newy);
}
}
vis[q[key].x][q[key].y]=-1;
}
return week;
}
int main()
{
memset(vis,-1,sizeof(vis));
memset(d,-1,sizeof(d));
tail=0,head=0;
int x,y,x0,y0,week;
int i,j;
char grass;
scanf("%d%d%d%d",&y,&x,&y0,&x0);
for(i=x;i>0;i--)
for(j=1;j<=y;j++)
{
scanf("%c",&grass);
if(grass=='.') vis[i][j]=1;
}
week=bfs(x0,y0);
printf("%d",week);
return 0;
}
