您的位置:首页 > 编程语言 > C语言/C++

八皇后问题,C++实现

2012-04-26 23:32 603 查看
(1)递归方法
//八皇后问题递归实现,跟求全排列的思想类似,全排列+剪枝;
//10000000
//01000000
//00100000
//00010000
//00001000
//00000100
//00000010
//00000001 相当于将这八个数字串用来排列,使其满足八皇后的条件,1代表皇后所在位置
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<unsigned char> array;
int cnt=0;

bool flag=false;
void findqueen(unsigned char *X,int first,int num)
{

if (num<=0)
{
++cnt;
return ;
}
for (int i=first;i<first+num;++i)
{
flag=false;
swap(X[first],X[i]);
for (int k=0;k<first;++k) //每次判断当前插入的串与之前排好的串是否冲突,X[first]为当前串
{
if (X[k]>X[first])
{
if ((X[k]>>(first-k))==X[first])
{
flag=true;
break;
}
}
else
{
if ((X[k]<<(first-k))==X[first])
{
flag=true;
break;
}

}
}
if (flag) //若冲突就尝试下一个循环,把后面的串换到当前位置
{
swap(X[first],X[i]);
continue;
}
findqueen(X,first+1,num-1);
swap(X[first],X[i]);
}
}

int main()
{
unsigned char X[8]={128,64,32,16,8,4,2,1};
//int way[8];
findqueen(X,0,8);
cout<<cnt<<endl;
//cout<<(X[5]<<1)<<endl;
//cout<<X[5]<<endl;

return	0;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++