zoukankan      html  css  js  c++  java
  • POJ-2386.Lakecounting(DFS求连通块)

      本题是一道连通块的入门题,用来练手,后续还会更新连通块的题目。

      本题大意:一个n * m 的陆地上面有很多水洼,让你统计水洼的个数并输出。

      本题思路:按照顺序遍历陆地,如果发现水洼就将它的八连块都进行探索,发现水洼就继续探索,直到一片大水洼都被探索完,就继续进行其他搜索,DFS。

      代码:

     1 #include <cstdio>
     2 using namespace std;
     3 
     4 const int maxn = 100 + 5;
     5 char field[maxn][maxn];
     6 int n, m, ans;
     7 
     8 void dfs(int u, int v) {
     9     field[u][v] = '.';//将正在探索的水洼变为陆地,方便后续查询
    10     for(int dx = -1; dx <= 1; dx ++) {
    11         for(int dy = -1; dy <=1; dy ++) {
    12             int nx = u + dx, ny = v + dy;
    13             if(nx >= 0 && nx < n && ny >= 0 && ny < m && field[nx][ny] == 'W')
    14                 dfs(nx, ny);
    15         }
    16     }
    17 }
    18 
    19 int main () {
    20     ans = 0;
    21     scanf("%d %d", &n, &m);
    22     getchar();
    23     for(int i = 0; i < n; i ++) {
    24         for(int j = 0; j < m; j ++)
    25             field[i][j] = getchar();
    26         getchar();
    27     }
    28     for(int i = 0; i < n; i ++)
    29         for(int j = 0; j < m; j ++)
    30             if(field[i][j] == 'W') {//如果一个地方为水洼,则将和他连在一起的所有水洼都变为陆地,方便后续的统计
    31                 dfs(i, j);
    32                 ans ++;
    33             }
    34     printf("%d
    ", ans);
    35     return 0;
    36 }
    View Code

       还有一道题HDU1241和这道题一模一样,建议大家二选一即可。

  • 相关阅读:
    Thinkphp 模板中使用自定义函数的方法
    thinkphp 邮件发送
    str_replace使用
    SQL备份一张表的数据
    error: Allowed memory size
    LitJson使用
    implode,explode的使用
    ModelState.AddModelError使用
    HTTP 错误 404.2
    验证码显示不出来,在THINKPHP中的使用
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10475416.html
Copyright © 2011-2022 走看看