用bfs 广度优先搜索
记录个数
#include<iostream>
#include<queue>
using namespace std;
#define N 101
int go[8][2] = { -1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1,
};
struct E {
int x, y;
};//定义位置
queue<E> Q;//队列
bool mark[N][N];//标记
char maze[N][N];//初始数组
int m, n;
void bfs(int x, int y) {
E tmp, now;//定义的初始位置和目前的位置
tmp.x = x;
tmp.y = y;//定义初始位置
Q.push(tmp);//将初始位置存入
while (!Q.empty()) {
now = Q.front();//返回队列首个
Q.pop();//删除首个
for (int i = 0; i < 8; ++i) {
int nx = now.x + go[i][0];
int ny = now.y + go[i][1];
if (nx<1 || nx>m || ny<0 || ny>n) {
continue;
}
if (mark[nx][ny] == true) {
continue;
}
if (maze[nx][ny] == '*') {
continue;
}
tmp.x = nx;
tmp.y = ny;
Q.push(tmp);
mark[nx][ny] = true;
}
}
return ;
}
int main() {
while (cin >> m >> n)
{
if (m == 0) { return 0; }
int ans = 0;
while (!Q.empty()) {
Q.pop();
}
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
mark[i][j] = false;
cin >> maze[i][j];
}
}
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (maze[i][j] == '*') {
continue;
}
if (mark[i][j] == true) {
continue;
}
bfs(i, j);
ans++;
}
}
cout << ans<<endl;
}
return 0;
}