zoukankan      html  css  js  c++  java
  • 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;
    }




  • 相关阅读:
    iOS:解决打包可能会出现环境错误问题
    iOS:关于self.perfrom(:_, with: afterDelay: )不执行问题
    docker容器中安装vi命令
    java-1 基础一
    java-0 重拾java
    柯里化函数的实现
    flex布局最后一行列表左对齐的N种方法
    【第一弹】微服务认证与授权企业级理解
    MySQL性能优化(慢查询日志、Explain执行计划、show profile、MySQL服务优化)
    MySQL锁详解
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563650.html
Copyright © 2011-2022 走看看