AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
const int dx[] = {-1,-1,-1,0,1,1,1,0},dy[] = {1,0,-1,-1,-1,0,1,1};
char oil[105][105];
int vis[105][105];
int n,m;
void dfs(int x,int y){
if(vis[x][y])
return;
vis[x][y] = 1;
for(int i = 0; i < 8; i++){
int xx = x+dx[i],yy = y+dy[i];
if(xx < 0 || xx >= n || yy < 0 || yy >= m)
continue;
if(oil[xx][yy] == '@')
dfs(xx,yy);
}
}
int main(){
while(scanf("%d%d",&n,&m),n+m){
memset(vis,0,sizeof(vis));
for(int i = 0; i < n; i++)
scanf("%s",oil[i]);
int cnt = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(oil[i][j] == '@' && !vis[i][j]){
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
}
return 0;
}