/* hdu 1241 搜尋類水題。 題目大意是,@代表有油田,連續的@算是一塊油田 問共有多少塊油田。 只要向八個方向dfs即可;*/#include <iostream>#include <cstdio>#define maxn 105using namespace std;int n,m;int Count;char grid[maxn][maxn];int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{1,1},{-1,1},{1,-1}};void dfs(int x,int y){ //if(step==m*n) return; //if(grid[x][y]=='*') return; if(x<1 || x>n || y<1 || y>m) return; // printf("x:%d y:%d\n",x,y); for(int i=0;i<8;i++) { int a=dir[i][0]+x,b=dir[i][1]+y; // printf("a:%d b:%d\n",a,b); if(a<1 || a>n || b<1 || b>m) continue; if(grid[a][b]=='*') continue; //printf("enter:a:%d b:%d\n",a,b); grid[a][b]='*'; dfs(a,b); }}int main(){ while(scanf("%d%d",&n,&m),m||n) { char str[maxn]; for(int i=1;i<=n;i++) { scanf("%s",str); for(int j=0;j<m;j++) grid[i][j+1]=str[j]; }// for(int i=1;i<=n;i++)// {// for(int j=1;j<=m;j++)// {// printf("%c",grid[i][j]);;// }// printf("\n");// } Count=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(grid[i][j]=='@') { grid[i][j]=='*'; dfs(i,j); Count++; } } printf("%d\n",Count); }}