#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
/*
问题:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
题目不需要输出棋盘摆放结果,而是输出总共有多少种解
输入:
4
输出:
2
*/
class Solution {
public:
void place(int pos , vector<int>& result , int& totalResult , int n)
{
//输出结果
if(pos == n)
{
totalResult++;
return;
}
//从中选出任意一个i值作为result[pos]摆放,作为第pos行的列
for(int i = 0 ; i < n ; i++)
{
bool isOk = true;
for(int j = 0 ; j < pos ; j++)
{
//如果在同一列,说明不符合,
if(result.at(j) == i)
{
isOk = false;
break;
}
//如果在同一对角线
if( abs( result.at(j) - i ) == abs(j - pos) )
{
isOk = false;
break;
}
}
if(isOk)
{
//说明符合摆放
result.push_back(i);
place(pos + 1 , result , totalResult , n);
//回溯
result.pop_back();
}
}
}
int totalNQueens(int n) {
if(n <= 0)
{
return 0;
}
vector<int> result;//初始化一个数组
int totalResult = 0;
place(0 , result , totalResult , n);
//转化为字符串输出
return totalResult;
}
};
void process()
{
int n;
Solution solution;
while(cin >> n)
{
int result = solution.totalNQueens(n);
cout << result << endl;
}
}
int main(int argc , char* argv[])
{
process();
getchar();
return 0;
}
leecode 解题总结:52. N-Queens II
最新推荐文章于 2019-03-20 10:13:35 发布