poj 2386 Lake Counting (BFS~)

来源:互联网 发布:bjd娃娃正版淘宝店 编辑:程序博客网 时间:2024/06/10 01:44
// 2012-05-28 水泡个数 p2386 bfs#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <stack>#include <queue>#include <algorithm>#define Bug cout << "here\n";using namespace std;const int N = 105;struct Point {    int x, y;};int n, m, ans;int d_x[] = {-1, -1, -1, 0, 0, 1, 1, 1};int d_y[] = {-1, 0, 1, -1, 1, -1, 0, 1};int map[N][N];bool ok(int a, int b) {    if(0 <= a && a < n && 0 <= b && b < m && map[a][b] == 1) {        return true;    }    return false;}queue<Point> Q;void bfs(int x, int y) {    map[x][y] = 0;    Point cur, nex;    cur.x = x;    cur.y = y;    while(!Q.empty()) Q.pop();    Q.push(cur);    while(!Q.empty()) {        cur = Q.front();        Q.pop();        for(int i = 0; i < 8; i++) {            nex.x = cur.x + d_x[i];            nex.y = cur.y + d_y[i];            if(ok(nex.x, nex.y)) {                map[nex.x][nex.y] = 0;                Q.push(nex);            }        }    }}int main() {    int i, j;    char str[N];    scanf("%d%d", &n, &m);    for(i = 0; i < n; i++) {        scanf("%s", str);        for(j = 0; j < m; j++) {            if(str[j] == 'W') {                map[i][j] = 1;            }            else map[i][j] = 0;        }    }    ans = 0;    for(i = 0; i < n; i++) {        for(j = 0; j < m; j++) {            if(map[i][j] == 1) {                bfs(i, j);                ans++;            }        }    }    printf("%d\n", ans);    return 0;}


 

原创粉丝点击