//八皇后问题
//我们用第i个数字代表第i行
//我们用数组中的值来依次代表某个列
//这样我们就保证了行列不发生冲突,我们只用判断两个数字(皇后)是否在对角线上就行了
//代码实现如下:
#include<iostream>
using namespace std;
int count = 0;//统计满足条件的组合
void getEightQueenNum(int *eightQueen,int begin, int len)
{
if(eightQueen==NULL || len!=8)
{
return ;
}
if(begin == len-1)//当begin循环到最后一位时,递归程序退出,如果此时满足条件,则个数count加1
{
bool flag = true;
for(int i=0; i<len; ++i)//这相当于求数组的排列组合
{
for(int j=i+1;j<len; ++j)
{
if(i-j==eightQueen[i]-eightQueen[j] || i-j==eightQueen[j]-eightQueen[i])//如果在对角线上,则不满足条件
{
flag = false;
break;
}
}
}
if(flag)
{
++count;
}
}
else//如果还没有到最后一个 那么继续递归
{
for(int i=begin; i<len; ++i)
{
swap(eightQueen[i], eightQueen[begin]);
getEightQueenNum(eightQueen,begin+1, 8);
swap(eightQueen[i], eightQueen[begin]);
}
}
}
int main()
{
int eightQueen[8] = {0,1,2,3,4,5,6,7};
getEightQueenNum(eightQueen, 0, 8);
cout<<count<<endl;
return 0;
}原文:http://blog.csdn.net/huai1693838234/article/details/44629263