请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于LeetCode上N皇后II的疑问

class Solution {
private:
int res=0;
void backtrack(int row, vector& temp) {
if (row == temp.size()) {
res++;
return;
}
int n = temp[row].size();
for (int col = 0; col < n; col++) {
if (!vaild(temp, row, col)) {
continue;
}
temp[row][col] = ‘Q’;
backtrack(row + 1,temp);
temp[row][col] = ‘.’;
}
}
bool vaild(vector& temp, int row, int col) {
int n = temp.size();
for (int i = 0; i < n; i++) {
if (temp[i][col] == ‘Q’) {
return false;
}
for (int i = row - 1, j = col + 1; i >= 0 && j < n; i–, j++) {
if (temp[i][j] == ‘Q’) {
return false;
}
}
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i–, j–) {
if (temp[i][j] == ‘Q’) {
return false;
}
}
}
return true;
}
public:
int totalNQueens(int n) {
vectortemp(n, string(n, ‘.’));
if (n == 0)return res;
backtrack(0, temp);
return res;
}
};
这是我提交的正确的代码,我觉得下面这个样例不能通过图片描述

正在回答 回答被采纳积分+3

2回答

提问者 我是笨笨蛋 2020-08-09 18:50:18

因为N皇后II的判定条件是只能走1步或N-1步,用我提交的代码的话,每一条直线上不能出现重复的皇后

0 回复 有任何疑惑可以回复我~
  • 你的意思是对于 n = 5,你的盘面也应该是一个解?
    回复 有任何疑惑可以回复我~ 2020-08-09 18:51:07
  • 提问者 我是笨笨蛋 回复 liuyubobobo #2
    是的!
    回复 有任何疑惑可以回复我~ 2020-08-09 18:51:45
  • 我明白了,你的意思是后面的注解:她横、竖、斜都可走一或 N-1 步,所以在 n = 5 的时候,皇后应该不能走两步三步四步?如果是这个问题,这个问题后面的注解是错误的。皇后可以走任意多步。
    回复 有任何疑惑可以回复我~ 2020-08-09 18:53:14
liuyubobobo 2020-08-09 18:49:51

抱歉,我还是没有理解你的问题。N 皇后 II 问题是输入一个 n,输出这个 n 皇后问题解的个数。所以测试用例应该是一个数字 n,而不是一个盘面。


你画一个盘面,这个盘面什么意思?

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信