一.题目
Total Accepted: 35494
Total Submissions: 96158 Difficulty: Hard
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Show Tags
Show Similar Problems
Have you met this question in a real interview?
Yes
No
二.解题技巧
这道题和普通的N皇后问题是一样的,只不过这个是输出可能存在的情况的个数,过程是一样的,至少返回值不一样而已。
三.实现代码
#include <iostream>
#include <string>
#include <vector>
using std::string;
using std::vector;
class Solution
{
private:
void DFS(int n_Index, vector<vector<int>> &State, int &Result)
{
if (n_Index == State.size() - 1)
{
for (int Index = 0; Index < State.size(); ++Index)
{
if (State[n_Index][Index] == 1)
{
Result++;
break;
}
}
return;
}
for (int Index = 0; Index < State.size(); ++Index)
{
if (State[n_Index][Index] == 1)
{
SetStatue(n_Index, Index, 1, State);
DFS(n_Index + 1, State, Result);
SetStatue(n_Index, Index, -1, State);
}
}
}
void SetStatue(int n_Index, int Index, int Value, vector<vector<int>> &State)
{
// col
for (int ColIndex = Index; ColIndex < State.size(); ++ColIndex)
{
State[n_Index][ColIndex] += Value;
}
// row
for (int RowIndex = n_Index; RowIndex < State.size(); ++RowIndex)
{
State[RowIndex][Index] += Value;
}
int RowIndex = n_Index + 1;
int ColIndex = Index - 1;
while(RowIndex < State.size() && ColIndex >= 0)
{
State[RowIndex][ColIndex] += Value;
RowIndex++;
ColIndex--;
}
RowIndex = n_Index + 1;
ColIndex = Index + 1;
while (RowIndex < State.size() && ColIndex < State.size())
{
State[RowIndex][ColIndex] += Value;
RowIndex++;
ColIndex++;
}
}
public:
int totalNQueens(int n)
{
int Result = 0;
vector<int> TmpStatues(n, 1);
vector<vector<int>> State(n, TmpStatues);
if (n == 0)
{
return Result;
}
DFS(0, State, Result);
return Result;
}
};
四.体会
和普通的N皇后问题一样。
版权所有,欢迎转载,转载请注明出处,谢谢![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)