新白书P162
5 5
****@*@@*@
*@**@
@@@*@
@@**@
5 5
*@**@
*@@*@
***@*
@*@*@
@@**@
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=100;
char maps[maxn][maxn];
int mark[maxn][maxn];
int m,n;
void dfs(int i,int j)
{
if(i<0||i>=m||j<0||j>=n||maps[i][j]!='@'||mark[i][j]==1)
return;
mark[i][j]=1;
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
dfs(i-1,j-1);
dfs(i+1,j+1);
dfs(i-1,j+1);
dfs(i+1,j-1);
}
int main()
{
int i,j,sum;
while(scanf("%d %d",&m,&n)!=EOF)
{
for(i=0;i<m;i++) scanf("%s",maps[i]);
memset(mark,0,sizeof(mark));
sum=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(maps[i][j]=='@'&&mark[i][j]==0){
dfs(i,j);
sum++;
}
printf("%d\n",sum);
}
return 0;
}