N 皇后代码骨架如下:
void dfs(int row) {
if (row == n) { ans++; return; }
for (int c = 0; c < n; c++) { /* 冲突检查、放置、递归、撤销 */ }
}
主函数调用 dfs(0),出口判断是 row == n。对「起点 0、出口 n」的理解,正确的是( )。
- A. 起点 0 有问题:棋盘行号从 1 开始,第 0 行不存在,这样写会越界
- B. 出口
row == n表示还剩一行没放,应该继续尝试放置 - C. 行号从 0 数到 n−1,
dfs(0)从第 0 行开始站岗;递归到row == n说明 n 行全部放完,收下这一种放法 - D. 出口也可以改写成
row == n - 1,计数效果完全相同