poj 2386
dfs的典型案例,并且比较完善的二维数组的动态内存分配和释放的应用
0ms
时间:O(NM)
空间:O(NM)
#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);
}
}
}

浙公网安备 33010602011771号