• POJ 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
     
     
     1 #include <iostream>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 
     6 char map[102][102];
     7 int ans=0;
     8 
     9 int dfs(int x,int y)
    10 {
    11     if(map[x][y]=='W')
    12     {
    13         map[x][y]='.';
    14         dfs(x-1,y-1);  dfs(x-1,y); dfs(x-1,y+1);
    15         dfs(x,y-1);                      dfs(x,y+1);
    16         dfs(x+1,y-1); dfs(x+1,y); dfs(x+1,y+1);
    17 
    18         return 1;
    19 
    20     }
    21     else return 0;
    22 }
    23 
    24 
    25 int main()
    26 {
    27     
    28     int m,n;
    29     int i,j;
    30     cin>>m>>n;
    31     ans=0;
    32     memset(map,'.',sizeof(map));
    33     for(i=1;i<=m;i++)
    34         for(j=1;j<=n;j++)
    35         {
    36             cin>>map[i][j];
    37         }
    38 
    39 
    40     for(i=1;i<=m;i++)
    41         for(j=1;j<=n;j++)
    42         {
    43             if(dfs(i,j))
    44                 ans++;
    45         }
    46 
    47 //    cout<<dfs(1,1)<<endl;
    48 
    49     cout<<ans;
    50 
    51 
    52     return 0;
    53 }
  • 相关阅读:
    有关macOS隐藏文件的问题
    AcWing 2548. 大胖子走迷宫(BFS)
    AcWing 1224. 交换瓶子(交换最少次数使得数列有序)
    AcWing 1220. 生命之树(树形DP)
    AcWing 1215. 小朋友排队(树状数组)
    AcWing 1214. 波动数列(推柿子+DP)
    Python文件操作
    远程升级程序过程
    找某个Linux内核可能调用的文件
    linux platform简易的理解
  • 原文地址:https://www.cnblogs.com/CKboss/p/3014134.html
Copyright © 2020-2023  润新知