• Lake Counting


    最基本的DFS

    Lake Counting

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
    Total Submission(s) : 10   Accepted Submission(s) : 3
    Problem 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 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.
     

    Sample Output
    3
     

    Source
    PKU
     


    #include <iostream>
    #include <cstring>

    using namespace std;

    char map[102][102];
    int ans=0;

    int dfs(int x,int y)
    {
        if(map[x][y]=='W')
        {
            map[x][y]='.';
            dfs(x-1,y-1);  dfs(x-1,y); dfs(x-1,y+1);
            dfs(x,y-1);                      dfs(x,y+1);
            dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1);

            return 1;

        }
        else return 0;
    }


    int main()
    {
        
        int m,n;
        int i,j;
        cin>>m>>n;
        ans=0;
        memset(map,'.',sizeof(map));
        for(i=1;i<=m;i++)
            for(j=1;j<=n;j++)
            {
                cin>>map[j];
            }


        for(i=1;i<=m;i++)
            for(j=1;j<=n;j++)
            {
                if(dfs(i,j))
                    ans++;
            }

    //    cout<<dfs(1,1)<<endl;

        cout<<ans;


        return 0;
    }
  • 相关阅读:
    内存映射的原理
    Intel 面试(就不该报外企,英语是硬伤)
    基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
    pdflush机制
    百度面试
    同步IO和异步IO的区别
    阿里面试
    linux内核学习之四:进程切换简述
    static成员函数不能调用non-static成员函数
    C/C++函数调用方式
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351105.html
Copyright © 2020-2023  润新知