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

     

    (完)

  • 相关阅读:
    web 学习资源整理
    CodeSmith 学习资料收集
    常用 T_SQL 语句
    SQL Server 2000查询分析器自定义查询快捷键
    插入标识列 identity_insert
    c# 上传FTP文件
    (.Net 3.5Sp1)WebForm使用System.Web.Routing
    SPQuery.ViewAttributes
    ChatterBot之linux下安装mongodb 02
    linux端口开放指定端口的两种方法
  • 原文地址:https://www.cnblogs.com/shadowland/p/5975704.html
Copyright © 2011-2022 走看看