又是一道dfs基础题,马上要上研究生了,估计要告别算法,转而去做项目了,不知道下次再写这个算法是什么时候了,唉。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int vis[30][30];
int r,c;
char map[30][30];
int p;
int f[][2]={{1,0},{-1,0},{0,1},{0,-1},
{1,1},{1,-1},{-1,1},{-1,-1}};
int d[][2]={{1,0},{-1,0},{0,1},{0,-1}};
void count(int x,int y)
{
int s,t,i;
for(i=0;i<4;i++)
{
s=x+d[i][0];t=y+d[i][1];
if(map[s][t]=='.')
{
p++;
}
}
}
void dfs(int x,int y)
{
int i,s,t;
if(vis[x][y])
return;
vis[x][y]=1;
count(x,y);
for(i=0;i<8;i++)
{
s=x+f[i][0];t=y+f[i][1];
if(map[s][t]=='X')
{
dfs(s,t);
}
}
}
int main()
{
int x,y;
int i,j,k;
while(scanf("%d%d",&r,&c)!=EOF)
{
scanf("%d%d",&x,&y);
if(r==0&&c==0&&x==0&&y==0)
{
break;
}
p=0;
memset(vis,0,sizeof(vis));
for(i=1;i<=r;i++)
{
getchar();
for(j=1;j<=c;j++)
{
scanf("%c",&map[i][j]);
}
}
for(i=0;i<=c+1;i++)
{
map[0][i]='.';
map[r+1][i]='.';
}
for(i=1;i<=r;i++)
{
map[i][0]='.';
map[i][c+1]='.';
}
dfs(x,y);
printf("%d\n",p);
}
return 0;
}