zoukankan      html  css  js  c++  java
  • POJ 2386 题解

    Lake Counting

    描述
    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
    提示
    OUTPUT DETAILS:

    There are three ponds: one in the upper left, one in the lower left,and one along the right side.
    来源
    USACO 2004 November
     1 #include "bits/stdc++.h"
     2 
     3 using namespace std ;
     4 const int maxN = 210 ;
     5 
     6 const int dx[ 10 ] = { 0 , 0 , 1 , 1 , 1 , -1 , -1 , -1 } ;
     7 const int dy[ 10 ] = { 1 , -1 , 1 , 0 , -1 , 1 , 0 , -1 } ;
     8 
     9 int mp[ maxN ][ maxN ] ;
    10 
    11 void DFS ( const int xi , const int yi ) {
    12         if ( !mp[ xi ][ yi ] )return ;
    13         mp[ xi ][ yi ] = false ;
    14         for ( int i=0 ; i<8 ; ++i ) {
    15                 int xx = xi + dx[ i ] ;
    16                 int yy = yi + dy[ i ] ;
    17                 DFS( xx , yy ) ;
    18         }
    19 }
    20 
    21 int main ( ) {
    22         int N , M  ;
    23         int _cnt = 0 ; 
    24         scanf ( "%d%d" , &N , &M ) ; 
    25         getchar ( ) ;
    26         for ( int i=1 ; i<=N ; ++i ) {
    27                 for ( int j=1 ; j<=M ; ++j ) {
    28                         if ( getchar ( ) == 'W' ) mp[ i ][ j ] = true ; 
    29                 }
    30                 getchar ( ) ;
    31         }
    32                 
    33         for ( int i=1 ; i<=N ; ++i ) {
    34                 for ( int j=1 ; j<=M ; ++j ) {
    35                         if ( mp[ i ][ j ] ) {
    36                                 _cnt ++ ;
    37                                 DFS ( i , j ) ;
    38                         }
    39                 }
    40         }
    41         cout << _cnt << endl ; 
    42         return 0 ; 
    43 } 
    View Code

     

    2016-10-19 00:25:45

     

    (完)

  • 相关阅读:
    SpringCloud
    Linux
    SpringBoot
    秒杀系统设计
    设计模式
    数据库(mysql)
    Java web
    c#常用控件及简写
    C#常用的form窗体属性(最大化、最小化、窗体居中)
    C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置
  • 原文地址:https://www.cnblogs.com/shadowland/p/5975704.html
Copyright © 2011-2022 走看看