• poj2386 Lake Counting


    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

    Hint

    OUTPUT DETAILS:

    There are three ponds: one in the upper left, one in the lower left,and one along the right side.
     
    题目大意是有一个园子,园子中W表示积水,积水周围8块有一块有积水就说明是联通的
    问你总共有几块积水块?
    代码如下:
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <iostream>
     5 using namespace std;
     6 int dis[][2] = {{0,1},{0,-1},{1,1},{1,-1},{1,0},{-1,0},{-1,1},{-1,-1}};
     7 
     8 int n,m;
     9 char map[102][102];
    10 
    11 void dfs(int x, int y) {
    12     map[x][y] = '.';
    13     for(int i = 0; i < 8; i++) {
    14         int xt = x + dis[i][0];
    15         int yt = y + dis[i][1];
    16         if(xt >= 0 && yt >= 0 && xt < n && yt < m && map[xt][yt] == 'W') {
    17             dfs(xt,yt);
    18         }
    19     }
    20 }
    21 int main(int argc, char const *argv[])
    22 {
    23     //freopen("input.txt","r",stdin);
    24     while(scanf("%d %d",&n,&m) != EOF) {
    25         for(int i = 0; i < n; i++) {
    26             scanf("%s",map[i]);
    27         }
    28         int cnt = 0;
    29         for(int i = 0; i < n; i++) {
    30             for(int j = 0; j < m; j++) {
    31                 if(map[i][j] == 'W') {
    32                     dfs(i,j);
    33                     cnt++;
    34                 }
    35             }
    36         }
    37         printf("%d
    ", cnt);
    38     }
    39     return 0;
    40 }

    采用深度优先搜索,搜索过的W改成.   ,直到没有W为止

    搜索过几次就有几块

  • 相关阅读:
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
    C#实现执行数据库事务案例
    RGB色彩对照表
    C# list.ForEach用法
    C# 实现list=list.OrderBy(q=>q.字段名).ToList(); 按多个字段排序
    IIS 7如何实现http重定向https
    Windows 2008 R2上配置IIS7或IIS7.5中的URLRewrite(URL重写)实例
    MVC网站发布到 IIS
    完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
    js返回上一页的实现方法
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5787968.html
Copyright © 2020-2023  润新知