• 【首先膜拜大湿】poj-2386-Lake Counting-DFS模板题


    Lake Counting
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 16802   Accepted: 8523

    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
    
    
    题目如上:
    AC代码如下:
    #include<iostream>
    #include<stdio.h>
    
    #define Max 105
    using namespace std;
    
    char f[Max][Max];
    int N ,M;
    void DFS(int x,int y)
    {
        f[x][y] = '.';
        for(int dx = -1; dx <= 1; dx++)
          for(int dy = -1; dy <= 1; dy++)
          {
              int nx, ny;
              nx = x + dx; ny = y + dy;
              if(nx < N&& ny < M&& nx >= 0&& ny >= 0&&f[nx][ny] == 'W') DFS(nx,ny);
          }
    
        return ;
    }
    int main()
    {
        int res = 0,i,j;
        cin>>N;
        cin>>M;
    
        for(i = 0; i < N; i++)
              scanf("%s",&f[i]);
    
        for(int i = 0; i < N; i++)
          for(int j = 0; j < M; j++)
            if(f[i][j] == 'W')
            {
              DFS(i,j);
              res++;
            }
       printf("%d
    ",res);
    }
    
    

    【存在的问题】1、脑残地把坐标轴坐标和矩阵的坐标对应起来了;
               2、解决了以上问题后程序还是在傲娇地RE,原来还是脑残地把“=”敲成“==”了;
                再后来程序还傲娇地WA了,于是           
               3、经大湿的指点把原输入
                  for(i = 0; i < N; i++)
                    for(j = 0; j < M; j++)
                       scanf("%c",&f[i][j]);
                 换成了
                   for(i = 0; i < N; i++)
                      scanf("%s", &f[i]);
                  蓝后就AC了~~o(≧v≦)o~~
                  原因就是%c输入把换行符给吃掉了~~蓝后造成了移位。。。。
                  ORZ。。。。
  • 相关阅读:
    bestcoder#45 1002 求区间的逆序数 树状数组
    poj2299 Ultra-QuickSort 树状数组求逆序数
    codeforces#323(div2) C. GCD Table 贪心
    bestcoder#58(div2) 1002 LCS 置换
    codeforces#321(div2) E. Kefa and Watch
    1sting
    HDU1013 Digital Roots
    【编程思想】【设计模式】【行为模式Behavioral】catalog
    【编程思想】【设计模式】【行为模式Behavioral】chain
    【编程思想】【设计模式】【结构模式Structural】代理模式Proxy
  • 原文地址:https://www.cnblogs.com/ZiningTang/p/3834725.html
Copyright © 2020-2023  润新知