http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=513#include "stdio.h" #include <iostream> #include <string.h> using namespace std; int vis[150][150]; char mat[150][150]; void dfs(int x,int y){ if(mat[x][y]=='*'||vis[x][y]) return ; vis[x][y]=1; dfs(x-1,y-1);dfs(x-1,y);dfs(x-1,y+1); dfs(x,y-1); dfs(x,y+1); dfs(x+1,y-1);dfs(x+1,y);dfs(x+1,y+1); } int main(){ int m,n; string s; while(scanf("%d%d",&m,&n)!=EOF) { memset(mat,'*',sizeof(mat)); memset(vis,0,sizeof(vis)); if(m==0&&n==0) return 0; else for(int i=0;i<m;i++){ cin>>s; for(int j=0;j<n;j++) mat[i+1][j+1]=s[j]; } int count=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) { if(!vis[i][j]&&mat[i][j]=='@') { count++;dfs(i,j); } } } cout<<count<<endl; } return 0; }