数连通块的外层循环长这样:
int cnt = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (room[i][j] == '.' && !vis[i][j]) {
dfs(i, j);
cnt++;
}
小酷问:条件里的 !vis[i][j] 能不能删掉?正确的回答是( )。
- A. 能删,
dfs内部反正会检查vis,不会走重复 - B. 能删,只是程序稍微慢一点,答案不变
- C. 不能删,删了会数组越界
- D. 不能删,删了同一片空地里的每个格子都会被当成「新片」再计一次数,
cnt会数成空地格子总数