这倒也是深搜题 比较麻烦的是对数据的读入时 先给的列后给的行数
# include <stdio.h>
int m,n;
char map[150][150];
int point[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void bfs(int x,int y)
{
int i,j,xx,yy;
for(i=0;i<4;i++)
{
xx=x+point[i][1];
yy=y+point[i][0];
if(xx<0||xx>=m||yy<0||yy>=n||map[xx][yy]!='.')
{
continue;
}
else
{
map[xx][yy]='1';
bfs(xx,yy);
}
}
return ;
}
int main ()
{
int i,mark,j,count;
//int a,b;
while(scanf("%d %d",&n,&m)!=EOF)
{
mark=0;
count=0;
if(0==m&&0==n)
break;
for(i=0;i<m;i++)
{
scanf("%s",map[i]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='@')
{
mark=1;
break;
}
}
if(mark)
break;
}
// printf("%d %d",i,j );
bfs(i,j);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(map[i][j]=='1')
count++;
}
printf("%d\n",count+1);
}
return 0;
}