#include<stdio.h>
#include<string.h>
char maze[25][25];
int map[25][25];
int visit[25][25];
int movex[8]={0,0,1,-1,1,1,-1,-1};
int movey[8]={1,-1,0,0,1,-1,1,-1};
int m,n,s,t,l;
void dfs(int a,int b)
{//深度搜索
int x,y,i;
for(i=0;i<8;i++)
{
x=a+movex[i];
y=b+movey[i];
if(x>=1&&x<=m&&y>=1&&y<=n&&!visit[x][y]&&map[x][y])
{
visit[x][y]=1;//标记是否访问过,当map=1的时候标记
dfs(x,y);
// maze[x][y]='.';
}
}
}
int main()
{
while(scanf("%d%d%d%d",&m,&n,&s,&t)!=EOF&&m)
{
int i,j;
int x,y,k;
memset(visit,0,sizeof(visit));
memset(map,0,sizeof(map));
getchar();
l=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%c",&maze[i][j]);
if(maze[i][j]=='X')
map[i][j]=1;//访问x的
//if(maze[i][])
else
map[i][j]=0;
}
getchar();
}
visit[s][t]=1;
dfs(s,t);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(visit[i][j])
for(k=0;k<4;k++)
{
x=i+movex[k];
y=j+movey[k];
if(map[x][y]==0)
{//计算周长
l++;
}
}
}
printf("%d\n",l);
}
return 0;
}
poj1111-搜索
最新推荐文章于 2020-06-23 17:21:17 发布