LV算法和回溯法结合解n后问题

我的算法作业: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]的值可以取从1n

       bool Backtrack(int t);    //n后问题的回溯法

       bool QueensLV(int stopVegas);    //随机放置stopVegas个皇后的LV算法  

       int n,*x,*y;                  //x,y

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值