UVA - 572_Oil Deposits(FloodFill)

Posted sanshi-2018

tags:

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

要求:计算二维中连通块个数。

#include<bits/stdc++.h>
using namespace std;

const int maxn = 100 + 3;
const int maxm = 100 + 3;
int m, n;
char buf[maxm][maxn];
bool book[maxm][maxn];


void floodfill(int r, int c)
{
    book[r][c] = true;
    for(int dr = -1; dr < 2; dr++){
        for(int dc = -1; dc < 2; dc++){
            int rr = r + dr, cc = c + dc;
            if((rr < m && rr >= 0 && cc < n && cc >= 0) && buf[rr][cc] == @ && !book[rr][cc]){
                floodfill(rr, cc);
            }
        }
    }
}

int main()
{
    while(cin >> m >> n && m && n){
        memset(book, 0, sizeof(book));
        for(int i = 0; i < m; i++){
            scanf("%s", buf[i]);
        }
        int cnt = 0;
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(buf[i][j] == @ && !book[i][j]){
                    floodfill(i, j);
                    cnt++;
                }
            }
        }
        cout << cnt << endl;
    }
}

收获:

递归框架可以有两种类型:

  1. 显式写明递归边界,即递归中的返回条件。

  2. 限定进入递归的条件,而省掉返回条件。

以上是关于UVA - 572_Oil Deposits(FloodFill)的主要内容,如果未能解决你的问题,请参考以下文章

UVa 572 Oil Deposits(简单DFS)

题解 UVA572 Oil Deposits

题解 UVA572 Oil Deposits

UVa 572 - Oil Deposits DFS联通块问题

UVA 572 Oil Deposits(DFS求连通块)

UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)