POJ1111
#include <iostream>
#include <string.h>
using namespace std;
char grid[25][25];
int vis[25][25];
int n,m,x,y,tol;
void DFS(int a,int b)
{
vis[a][b]=1;
if(b+1<=m)//右面
{
if(b+1==m)
{
tol++;
}
else
{
if(grid[a][b+1]=='X'&&vis[a][b+1]==0)
{
DFS(a,b+1);
}
if(grid[a][b+1]=='.')
{
tol++;
}
}
}
if(b-1>=-1)//左面
{
if(b-1==-1)
{
tol++;
}
else
{
if(grid[a][b-1]=='X'&&vis[a][b-1]==0)
{
DFS(a,b-1);
}
if(grid[a][b-1]=='.')
{
tol++;
}
}
}
if(a-1>=-1)//上面
{
if(a-1==-1)
{
tol++;
}
else
{
if(grid[a-1][b]=='X'&&vis[a-1][b]==0)
{
DFS(a-1,b);
}
if(grid[a-1][b]=='.')
{
tol++;
}
}
}
if(a+1<=n)//下面
{
if(a+1==n)
{
tol++;
}
else
{
if(grid[a+1][b]=='X'&&vis[a+1][b]==0)
{
DFS(a+1,b);
}
if(grid[a+1][b]=='.')
{
tol++;
}
}
}
if(b-1>-1&&a-1>-1&&grid[a-1][b-1]=='X'&&vis[a-1][b-1]==0)//左上
{
DFS(a-1,b-1);
}
if(b-1>-1&&a+1<n&&grid[a+1][b-1]=='X'&&vis[a+1][b-1]==0)//左下
{
DFS(a+1,b-1);
}
if(b+1<m&&a-1>-1&&grid[a-1][b+1]=='X'&&vis[a-1][b+1]==0)//右上
{
DFS(a-1,b+1);
}
if(b+1<m&&a+1<n&&grid[a+1][b+1]=='X'&&vis[a+1][b+1]==0)//右下
{
DFS(a+1,b+1);
}
}
int main()
{
int i,j;
while(cin>>n>>m>>x>>y,n)
{
tol=0;x--,y--;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>grid[i][j];
}
}
DFS(x,y);
cout<<tol<<endl;
}
return 0;
}

浙公网安备 33010602011771号