广搜
#include<iostream>
#include<queue>
using namespace std;
int Map[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
char Gra[25][25];
struct node
{
int x;
int y;
}start,temp;
int main()
{
int row,col,posr,posc;
queue<node> qu;
while((cin>>row>>col>>posr>>posc) && !(row==0 && col==0 && posr==0 && posc==0))
{
int i,j;
//外围加墙
for(i=0;i<=row+1;i++)
for(j=0;j<=col+1;j++)
Gra[i][j]='.';
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
cin>>Gra[i][j];
start.x=posr;
start.y=posc;
qu.push(start);
Gra[posr][posc]='#';
int sum=0;
while(!qu.empty())
{
start=qu.front();
qu.pop();
int x,y;
//判四周是否有物体,没有则边界加1
for(i=0;i<4;i++)
{
x=start.x+Map[i][0];
y=start.y+Map[i][1];
if(Gra[x][y]=='.')
sum++;
}
for(i=0;i<8;i++)
{
x=start.x+Map[i][0];
y=start.y+Map[i][1];
if(Gra[x][y]!='.' && Gra[x][y]!='#')
{
temp.x=x;
temp.y=y;
qu.push(temp);
Gra[x][y]='#';
}
}
}
cout<<sum<<endl;
}
return 0;
}