我的算法作业:n=12 ~ 20时,求出较优的stopVegas值。(也就随机放置几个皇后比较好的问题)。
解答:(VC6.0下调试通过,可能某些统计数据的计算部分,有不太妥当的地方,贴出来也就是有高手能给指点一下)
/**
*EX8:
* LV算法与回溯法相结合,解n皇后问题。求n=12~20时最优的StepVegas值
*/
#include<iostream>
#include<math.h>
#include<time.h>//随机函数的种子
using namespace std;
#define AVG 200//产生200个正确的解,然后再统计相关数据
int failure=0; //算法运行失败的次数
int success=0; //算法运行成功的次数
int nsnode=0; //一次成功搜索访问的结点数
int nfnode=0; //一次不成功搜索访问的结点数
int tempLVNode=0;
int tempBackNode=0;
class RandomNumber
{
public: int Random(int n)
{//生成0 ~ n-1之间的随机整数,n不大于32767
if(n>32767)
{
cout<<"您输入的n值不能大于32767"<<endl;
exit(-1);
}
int x;
x=rand();
return x%n;
}
};
class Queen
{
friend void nQueen(int);
public:
Queen(int n);
bool Place(int k); //测试皇后k置于第x[k]列的合法性, 注意:x[k]的值可以取从1到n
bool Backtrack(int t); //解n后问题的回溯法
bool QueensLV(int stopVegas); //随机放置stopVegas个皇后的LV算法
int n,*x,*y; //x,y