小酷嘀咕:「标记嘛,早晚写都一样。」于是他把骨架改成了这样:
void dfs(int x, int y) {
if (x < 0 || x >= n || y < 0 || y >= m) return;
if (room[x][y] == '#' || vis[x][y]) return;
for (int d = 0; d < 4; d++)
dfs(x + dx[d], y + dy[d]);
vis[x][y] = true; // 标记挪到了递归之后
}
关于这版代码,说法正确的是( )。
- A. 结果完全一样,反正每个格子最终都被标记上了
- B. 只是标记得晚一点,访问顺序会变,但不会出错
- C. 不会再访问重复格子,效率反而更高
- D. 照样死循环爆栈——递归还没返回、
vis还是 false,相邻格子会把同一个格子再进一遍