http://poj.org/problem?id=1562
#include<iostream> using namespace std; int n=0,m=0,sum=0; bool aa[105][105]; int dir[8][2]={-1,0, 1,0, 0,-1, 0,1, 1,1, -1,-1, -1,1, 1,-1 }; void dfs(int a,int b) { if(!aa[a][b])return; aa[a][b]=0; for(int i=0;i<8;i++) { int a1=a+dir[i][0]; int b1=b+dir[i][1]; if(a1>=0&&a1<m&&b1>=0&&b1<n) { // aa[a1][b1]=0; dfs(a1,b1); } } } int main() { while(cin>>m>>n) { sum=0; if(m==0)break; for(int i=0;i<m;i++) { char ch; for(int j=0;j<n;j++) { cin>>ch; if(ch=='*')aa[i][j]=0; else aa[i][j]=1; } } for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(aa[i][j]==1) { dfs(i,j); sum++; } } cout<<sum<<endl; } return 0; }