您的位置:首页 > 产品设计 > UI/UE

[Leetcode] 52. N-Queens II 解题报告

2017-01-11 15:05 609 查看
题目

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.



思路

和Leetcode 51思路完全一致。不过因为只需要返回符合条件的解的个数,所以可以在Leetcode 51的基础上做适当优化:我们仅仅用一个一维数组来表示棋盘,即board[i] = j意味着在第i行的皇后放在第j列。如果board[i] == -1,则表示该行上尚未放置皇后。此时对安全性的检查也会变得更加简单,如下代码中的safe函数所示。

代码

class Solution {
public:
int totalNQueens(int n)
{
int ret = 0;
vector<int&
4000
gt; board(n, -1);
DFS(ret, board, n, 0);
return ret;
}
private:
void DFS(int& ret, vector<int>&board, int n, int row)
{
if(row == n)
{
++ret;
return;
}
for(int i = 0; i < n; ++i)  // check each col in this row
{
if(safe(board, row, i, n))
{
board[row] = i;
DFS(ret, board, n, row + 1);
board[row] = -1;
}
}
}
bool safe(vector<int>&board, int row, int col, int n)
{
int val1 = row - col;
int val2 = row + col;
int temp = 0;
for(int i = 0; i < row; ++i)    // check the previous rows
{
if(board[i] == col)
return false;
temp = i - val1;
if(temp >= 0 && temp < n && board[i] == temp)
return false;
temp = val2 - i;
if(temp >= 0 && temp < n && board[i] == temp)
return false;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: