poj 2386

dfs的典型案例,并且比较完善的二维数组的动态内存分配和释放的应用
0ms
时间:O(NM)
空间:O(N
M)

#include <stdio.h>
#include <stdlib.h>

void dfs(char **arr, int N, int M, int x, int y);

int main() {
    int N, M;
    scanf("%d %d", &N, &M);
    char **arr = (char **) malloc(sizeof(char *) * N);
    for (int i = 0; i < N; i++) {
        arr[i] = (char *) malloc(sizeof(char) * (M + 1));  // 每个字符串额外分配一个位置用于存放字符串结束符'\0'
    }

    for (int i = 0; i < N; ++i) {
        scanf("%s", *(arr + i));
    }
    int ans = 0;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            if (arr[i][j] == 'W') {
                dfs(arr, N, M, i, j);
                ++ans;
            }
        }
    }
    for (int i = 0; i < N; i++) {
        free(arr[i]);
    }
    free(arr);
    printf("%d", ans);
    return 0;
}

void dfs(char **array, int N, int M, int x, int y) {
    int arr[][2] = {{-1, 0},   // 上
                    {1,  0},    // 下
                    {0,  -1},   // 左
                    {0,  1},    // 右
                    {-1, -1},  // 左上
                    {-1, 1},   // 右上
                    {1,  -1},   // 左下
                    {1,  1}};   // 右下
    array[x][y] = '.';
    for (int i = 0; i < 8; ++i) {
        int px = arr[i][0] + x;
        int py = arr[i][1] + y;
        if (px >= 0 && px < N && py >= 0 && py < M && array[px][py] == 'W') {
            dfs(array, N, M, px, py);
        }
    }
}
posted @ 2023-07-16 11:38  vctgo  阅读(14)  评论(0)    收藏  举报