#include <cstdio>
#include <cstring>
int M,N;
char A[101][101];
int B[101][101]={};
void DFS(int i,int j,int ID)
{
if(i<1||i>M||j<1||j>N) return;//界外
if(B[i][j]||A[i][j]!='@') return;//已经访问过或者不是@
B[i][j]=ID;//标识所属块 同时相当于标识已走
DFS(i-1,j-1,ID);DFS(i-1,j,ID);DFS(i-1,j+1,ID);
DFS(i,j-1,ID); DFS(i,j+1,ID);
DFS(i+1,j-1,ID);DFS(i+1,j,ID);DFS(i+1,j+1,ID);
}
int Handle(void)
{
int ID=0;
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
if(A[i][j]=='@'&&!B[i][j]) DFS(i,j,++ID);
return ID;
}
int main(void)
{
//freopen("D:\\test.txt","r",stdin);
while(~scanf("%d %d\n",&M,&N)&&M)
{
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
for(int i=1;i<=M;i++) scanf("%s",A[i]+1);
printf("%d\n",Handle());
// for(int i=1;i<=M;i++,putchar('\n'))
// for(int j=1;j<=N;j++) printf("%4d ",B[i][j]);
}
}
“`