zoukankan      html  css  js  c++  java
  • POJ 2386 Lake Counting(bfs解法)

    Description

    Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors.

    Given a diagram of Farmer John's field, determine how many ponds he has.

    Input

    * Line 1: Two space-separated integers: N and M

    * Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.

    Output

    * Line 1: The number of ponds in Farmer John's field.

    Sample Input

    10 12
    W........WW.
    .WWW.....WWW
    ....WW...WW.
    .........WW.
    .........W..
    ..W......W..
    .W.W.....WW.
    W.W.W.....W.
    .W.W......W.
    ..W.......W.

    Sample Output

    3

    Hint

    OUTPUT DETAILS:

    There are three ponds: one in the upper left, one in the lower left,and one along the right side.

    Source

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    
    #define ll long long
    int n, m, sum;;
    char position[100+8][100+8], mov[8][2] = {0,1, 1,0, 0,-1, -1,0, 1,1, 1,-1, -1,-1, -1,1};
    
    struct coordinate
    {
        int x, y;
    };
    
    void bfs(int a, int b)
    {
        queue<coordinate>q;
        coordinate miao;
        miao.x = a;
        miao.y = b;
        q.push(miao);
        while(!q.empty())
        {
            coordinate fir;
            fir = q.front();
            coordinate next;
            q.pop();//在这里就要弹出,不然后面会插入很多东西
            for(int i = 0; i<8; i++)
            {
                next.x = fir.x+mov[i][0];
                next.y = fir.y+mov[i][1];
                if(next.x >= 0 && next.x<n && next.y >= 0 && next.y<m && position[next.x][next.y] == 'W')
                {
                    position[next.x][next.y] = '.';
                    q.push(next);
                }
            }
        }
    }
    
    int main()
    {
        scanf("%d%d", &n, &m);
        getchar();
        sum = 0;
        for(int i = 0; i<n; i++)
        {
            for(int j = 0; j<m; j++)
            {
                scanf("%c", &position[i][j]);
            }
            getchar();
        }
        for(int  i = 0; i<n; i++)
            for(int j = 0; j<m; j++)
                if(position[i][j] == 'W')
                {
                    position[i][j] = '.';
                    bfs(i, j);
                    sum++;
                }
        printf("%d
    ", sum);
        return 0;
    }
  • 相关阅读:
    XSD限定/Facets
    XSD元素替换(Element Substitution)
    XSD指示器
    乔布斯29年前的预言
    三年程序员生涯的感悟、总结和憧憬
    用Jetty快速开发J2EE应用
    Cygwin安装
    Maven依赖继承的写法
    Struts2自定义日期转换器
    Struts2三种数据转移方式
  • 原文地址:https://www.cnblogs.com/RootVount/p/10452986.html
Copyright © 2011-2022 走看看