Lake Counting (POJ No.2386)

截取自《挑戰程序設計競賽》。
有一個大小爲 N*M 的園子,雨後積起了水。八連通的積水被認爲是連接在一起的。請求出園子裏有多少水窪?
N,M<= 100

輸入
N=10, M=12
W…WW.
.WWW…WWW
…WW…WW.
…WW.
…W…
…W…W…
.W.W…WW.
W.W.W…W.
.W.W…W.
…W…W.

輸出
3

#include <iostream>
#include <cstdio>

const int MAX_N = 100, MAX_M = 100;

int N, M;
char field[MAX_N][MAX_M + 1];

void dfs(int x, int y) {
    field[x][y] = '.';

    for (int dx = -1; dx <= 1; ++dx) {
        for (int dy = -1; dy <=1; ++dy) {
            int nx = x + dx, ny = y + dy;
            if (0 <= nx && nx < N && 0 <= ny && ny < M && field[nx][ny] == 'W')
                dfs(nx, ny);
        }
    }
    return ;
}

void solve() {
    int res = 0;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j <M; ++j) {
            if (field[i][j] == 'W') {
                dfs(i, j);
                res++;
            }
        }
    }
    printf("%d\n", res);
}

int main()
{
    scanf("%d %d", &N, &M);

    printf("N = %d, M = %d\n", N, M);

    for (int i = 0 ; i < N; ++i) {
        scanf("%s", &*field[i]);
    }
    solve();
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章