深搜入门了。
#include<stdio.h>
#include<cstring>
int dir[8][2] = {{0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{1,1},{-1,-1}};
bool isVis[105][105];
char oil[105][105];
int m, n;
void dfs(int x, int y){
isVis[x][y] = true;
for(int i = 0; i < 8; i++){
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if( x >= 0 && y >= 0 && x < m && y < n && oil[dx][dy] == '@' && !isVis[dx][dy])
dfs(dx,dy);
}
}
int main()
{
while(~scanf("%d %d", &m, &n),m+n){
for(int i = 0; i < m; i++)
scanf("%s", oil[i]);
memset(isVis, 0, sizeof(isVis));
int ans = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++)
if(oil[i][j] == '@' && !isVis[i][j]){
ans ++;
dfs(i,j);
}
}
printf("%d\n",ans);
}
return 0;
}