小河统计校园地图里最大的一片空地有多大。他把 dfs 改成有返回值:每进入一个新格子并标记后,返回 加上四个方向递归返回值之和——也就是「这一片连着染了多少格」。主循环写成:
int best = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (room[i][j] == '.' && !vis[i][j])
best = max(best, dfs(i, j));
对下面这张 的地图(. 空地、# 墙)跑一遍,程序输出( )。
.###
.#..
###.
- A. 1——以为
dfs只会把起点这一个格数进来 - B. 2——输出的是连通块的块数,和「数有几片」的程序搞混了
- C. 5——把两片各自的返回值加了起来,求出的是全图空地总数
- D. 3——每一片返回自己的面积,外层取最大