#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>
#define GG getchar();
using namespace std;
int dx[9]={0,-1,1,0,1,-1,1,-1};
int dy[9]={1,0,0,-1,1,-1,-1,1};
int n,m;
int Map[200][200],vis[200][200];
void dfs(int x,int y)
{
// if(vis[x][y]) return ;
vis[x][y]=1;
for(int i=0;i<8;i++){
int xx=dx[i]+x;int yy=dy[i]+y;
if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy]&&Map[xx][yy]){
// cout<<x<<" " <<y<<endl;
// cout<<xx<<" "<<yy<<endl;system("pause");
vis[xx][yy]=1;
dfs(xx,yy);
}
}
}
int main()
{
while(cin>>n>>m,n||m){
GG;
int ans=0;
memset(vis,0,sizeof(vis));
memset(Map,0,sizeof(Map));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
char c;
cin>>c;
if(c==‘*‘){
Map[i][j]=0;
}
else Map[i][j]=1;
}
GG;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(Map[i][j]&&!vis[i][j]){
ans++;dfs(i,j);
}
}
}
cout<<ans<<endl;
}
return 0;
}
原文地址:http://www.cnblogs.com/yigexigua/p/3845112.html