小酷抄网格 DFS 骨架时,不小心把「出界」和「墙」两行的先后顺序写反了:
void dfs(int x, int y) {
if (room[x][y] == '#') return; // 墙,不走
if (x < 0 || x >= n || y < 0 || y >= m) return; // 出界,不走
if (vis[x][y]) return;
vis[x][y] = true;
for (int d = 0; d < 4; d++) dfs(x + dx[d], y + dy[d]);
}
这版代码最可能出现的问题是( )。
- A. 没问题,两关谁先谁后结果一样
- B. 会把墙当成空地走进去
- C. 当 dfs 被调到界外坐标(比如
(-1,0))时,第一行就访问room[-1][0],数组越界,程序可能直接崩溃 - D.
vis标记失效,程序会死循环