• NUC1158 Lake Counting【DFS】


    Lake Counting

    时间限制: 1000ms 内存限制: 65536KB

    通过次数: 1总提交次数: 1

    问题描述

    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.
    输入描述
    * 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.
    输出描述
    * Line 1: The number of ponds in Farmer John's field.
    样例输入
    10 12
    W........WW.
    .WWW.....WWW
    ....WW...WW.
    .........WW.
    .........W..
    ..W......W..
    .W.W.....WW.
    W.W.W.....W.
    .W.W......W.
    ..W.......W.
    
    样例输出
    3
    
    来源
    USACO 2004 November Gold
    提示
    OUTPUT DETAILS: There are three ponds: one in the upper left, one in the lower left,and one along the right side.


    问题分析:(略)

    这个问题和《POJ2386 Lake Counting【DFS】》是同一个问题,代码直接用就AC了。

    程序说明:参见参考链接。

    参考链接:POJ2386 Lake Counting【DFS】

    题记:程序做多了,不定哪天遇见似曾相识的。

    AC的C++程序如下:

    /* POJ2386 Lake Counting */
    
    #include <stdio.h>
    #include <string.h>
    
    #define DIRECTSIZE 8
    
    struct direct {
        int drow;
        int dcol;
    } direct[DIRECTSIZE] =
        {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
    
    #define MAXN 100
    
    char grid[MAXN+2][MAXN+2];
    
    void dfs(int row, int col)
    {
        int i;
    
        for(i=0; i<DIRECTSIZE; i++) {
            int nextrow = row + direct[i].drow;
            int nextcol = col + direct[i].dcol;
    
            if(grid[nextrow][nextcol] == 'W') {
                grid[nextrow][nextcol] = '.';
    
                dfs(nextrow, nextcol);
            }
        }
    }
    
    int main(void)
    {
        int m, n, count, i, j;
    
        while(scanf("%d%d", &m, &n) != EOF) {
            // 清零:边界清零
            memset(grid, 0, sizeof(grid));
    
            // 读入数据
            for(i=1; i<=m; i++)
                scanf("%s", grid[i]+1);
    
            // 计数清零
            count = 0;
    
            // 深度优先搜索
            for(i=1; i<=m; i++)
                for(j=1; j<=n; j++)
                    if(grid[i][j] == 'W') {
                        count++;
                        grid[i][j] = '.';
                        dfs(i, j);
                    }
    
            // 输出结果
            printf("%d
    ", count);
        }
    
        return 0;
    }




  • 相关阅读:
    网页设计 【0834】
    Apache Commons Lang
    Arduino U8G2 OLED_SSD1306_Chart
    Arduino Adafruit_SSD1306的使用
    proteus pro 8.9 安装及汉化教程
    AD IC类元件模型的创建
    C/C++ 深入理解char * ,char ** ,char a[ ] ,char *a[] 的区别
    Arduino MLX90614
    Arduino uno mega2560
    C语言 堆和栈
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563650.html
Copyright © 2020-2023  润新知