#include <cmath>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
//::前面可以是 类名,命名空间名 来限定 ::后面的内容从哪里读取
class queen //使用类来封装 皇后问题,注意类的实现
{
friend int nQueen(int n); //友元函数
private:
void backtrack(int t); //搜索函数
bool place(int k); //判断(k,x[k])是否可以放皇后
int cnt, //记录多少种放置方法
n, //是几皇后
*x; //记录放置皇后的解
};
void queen::backtrack(int t)
{
if(t>n)
cnt++;
else
{
for(int i=1;i<=n;i++)
{
x[t]=i;
if(place(t))
backtrack(t+1);
}
}
}
bool queen::place(int k)
{
for(int j=1;j<=k-1;j++)
{
if((fabs(j-k)==fabs(x[j]-x[k]))||x[k]==x[j])
return false;
}
return true;
}
int nQueen(int n)
{
queen X;
X.n=n;
X.cnt=0;
X.backtrack(1);
return X.cnt;
}
int main()
{
/*
这样写显然会报错
queen X;
X.n=8; 'int queen::n' is private within this context
X.cnt=0;
*/
cout<<nQueen(8)<<endl;
return 0;
}
皇后问题
最新推荐文章于 2019-11-24 22:51:03 发布