DFS求连通块
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int m,n,idx[110][110];
char pic[110][110];
bool Isgood(int r, int c){
if(r < 0 || r >= m || c < 0 || c >= n)
return false;
return true;
}
void dfs(int r, int c, int id){
if(!Isgood(r,c)) return;
if(idx[r][c] || pic[r][c] != '@') return;
idx[r][c] = 1;
for(int dr = -1; dr <= 1; dr++)
for(int dc = -1; dc<=1; dc++)
if(dc != 0 || dr != 0) dfs(dr + r, dc + c, id);
}
int main(){
// freopen("in.txt", "r", stdin);
while(scanf("%d%d",&m,&n) == 2 && m){
for(int i=0; i<m; i++)
scanf("%s",pic[i]);
memset(idx, 0, sizeof(idx));
int cnt = 0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(!idx[i][j] && pic[i][j] == '@') dfs(i,j,++cnt);
}
}
printf("%d\n",cnt);
}
return 0;
}