#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> a;
//vector<vector<string> > s_total;
void init(int n)
{
a.resize(n);
for(int i=0;i<n;i++)
{
a[i]=-1000;
}
}
/*void print(int n)
{
vector<string> s;
for(int i=0;i<n;i++)
{
string now_s="";
for(int j=0;j<n;j++)
{
if(a[i]==j)
{
now_s=now_s+"Q";
//cout<<"Q";
}
else
{
now_s=now_s+'.';
//cout<<".";
}
}
s.push_back(now_s);
//cout<<now_s;
//cout<<endl;
}
//cout<<endl;
s_total.push_back(s);
}*/
int vaild(int row,int col)
{
for(int i=0;i<a.size();i++)
{
if(a[i]==col||abs(i-row)==abs(a[i]-col))
{
return 0;
}
}
return 1;
}
int queue(int row)
{
int n=0;
int i=0;
int j=0;
while(i<row)
{
while(j<row)
{
if(vaild(i,j)==1)
{
a[i]=j;
j=0;
break;
}
else
{
j++;
}
}
if(a[i]==-1000)
{
if(i==0)
break;
else
{
i--;
j=a[i]+1;
a[i]=-1000;
continue;
}
}
if(i==row-1)
{
//cout<<"-------------------------------------"<<endl;
n++;
//print(row);
j=a[i]+1;
a[i]=-1000;
continue;
}
i++;
}
return n;
}
int totalNQueens(int n) {
int sum=0;
if(n==0)
{
return 0;
}
else
{
init(n);
sum=queue(n);
return sum;
}
}
};
int main()
{
int n;
cin>>n;
Solution s1;
s1.solveNQueens(n);
return 0;
}
八皇后问题总结
最新推荐文章于 2021-03-08 22:06:04 发布