zoukankan      html  css  js  c++  java
  • POJ 之2386 Lake Counting

    Lake Counting
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 20003   Accepted: 10063

    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.
     题目分析:
         给出一块字符串区域代表地图,W代表water(水),其余代表土地,水的连接代表 湖,要我们计算这个地图里有几个湖。
     
    算法分析:注意用读入字符串的。。。未完待续!
     
     
     
     
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    char map[101][101];
    int vt[101][101];
    int dir[8][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};

    int n, m;

    void dfs(int x, int y)
    {
        int i;
        for(i=0; i<8; i++)
        {
            int xx = x + dir[i][0];
            int yy = y + dir[i][1];
            if(map[xx][yy]=='W' && xx>=0 && xx<m && yy>=0 && yy<n && vt[xx][yy]==0 )
            {
                vt[xx][yy] = 1;
                dfs(xx, yy);
            }
        }
    }

    int main()
    {
        int cnt;
        int i, j;
        while(scanf("%d %d%*c", &m, &n)!=EOF)
        {
            if(m==0 && n==0)
                break;
            cnt = 0;

            memset(vt, 0, sizeof(vt));

            for(i=0; i<m; i++)
            {
                scanf("%s", map[i]);
            }
            for(i=0; i<m; i++)
            {
                for(j=0; j<n; j++)
                {
                    if(map[i][j]=='W' && vt[i][j]==0)
                    {
                        vt[i][j] = 1;
                        cnt++;
                        dfs(i, j);
                    }
                }
            }
            printf("%d ", cnt);
        }
        return 0;
    }
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/yspworld/p/3871980.html
Copyright © 2011-2022 走看看