这是一道深搜的题 记住基本步骤之后就比较简单了 抓住一条线不停地向深处搜索直到不能搜索为止
# include <stdio.h>
char map[150][150];
int m,n;
void dfs(int x,int y)
{
int xx,yy;
int i,j;
for(i=-1;i<2;i++)
for(j=-1;j<2;j++)
{
xx=x+i;
yy=y+j;
if(xx<0||xx>=m||yy<0||yy>=n||map[xx][yy]!='@')
continue;
else
{
map[xx][yy]='1';
dfs(xx,yy);
}
}
return ;
}
int main ()
{
int count;
int i,j;
while(scanf("%d %d",&m,&n)!=EOF)
{
if(0==m&&0==n)
break;
count=0;
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]=='@')
{
dfs(i,j);
count++;
}
}
printf("%d\n",count);
}
return 0;
}