NOI 题库 1388

Posted struct Edge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOI 题库 1388相关的知识,希望对你有一定的参考价值。

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

 

(完)

以上是关于NOI 题库 1388的主要内容,如果未能解决你的问题,请参考以下文章

noi题库 2004

noi.openjudge的题目

NOI题库 1768最大子矩阵 题解

NOI题库9269:Big String超级字符串

NOI 题库 7084

NOI 题库 1792