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和这道题一模一样,建议大家二选一即可。

  • 相关阅读:
    微信小程序左右滚动公告栏效果
    返回当前页面title、url等操作
    打开URL操作
    打开浏览器操作
    Java for selenium(webdriver) 环境搭建
    HTMLTestRunner 自动化测试报告
    Python特殊语法:filter、map、reduce、lambda [转]
    抽象类
    __str__
    WebTable 扩展
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10475416.html
Copyright © 2011-2022 走看看