编辑代码

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
 
class Nqueen
{
public:
	long NQueen()
	{
		cout<<"请输入皇后个数!"<<endl;
		cin>>n;
		sum = 0;
		a.reserve(n+1);
		init();
		backtrack(1);
		return sum;
	}
	
private:
	bool place(int k)
	{
		for(int j = 1;j<k;j++)
		if((abs(k-j) == abs(a[k]-a[j]))||(a[k] == a[j])) return false;
		return  true;
	}
	void print()
	{
		for(int i = 1;i<= n;i++)
		{cout<<a[i]<<" ";}
		cout<<endl;
	}
	void init()
	{
		for(int i = 0;i<= n;i++)
			a[i] = 0;
	}
	void backtrack(int t)
	{
		if(t>n)
		{	sum++; 
			print();
		}
		else
			for(int i = 1;i<=n;i++)
			{
				a[t] = i;
				if(place(t))
				backtrack(t+1);
			}
			
	}
	vector<int> a;
	int n;
	long sum;
};
int main()
{
	Nqueen q;
	cout<<q.NQueen()<<endl;
}