拉斯维加斯算法结合回溯法求解n后问题

本文介绍了如何结合拉斯维加斯算法和回溯法来解决n皇后问题。通过设置不同的参数n和stopVgas,进行多组实验,观察并记录程序的成功率和运行时间。在实验过程中,对小规模数据进行手工验证,确保程序正确性,并设计参数进行运行。在实际应用中,以8皇后问题为例,对比书中的成功率与实际计算结果之间的差异。
摘要由CSDN通过智能技术生成
实验8  

拉斯维加斯算法结合回溯法求解n后问题

设stopVgas为采用拉斯维加斯算法随机排设的皇后个数,对n、stopVgas进行多组不同取值时,记录程序成功率、运行时间

① 参考课件、教材、其它资料,将伪代码改成正式程序代码。

② 用一组小数据,手工验证程序正确性,发现可能的错误并修复。

③ 自己设计参数n、stopVgas的不同取值(可参考教材所给表格)。

④ 对不同参数进行运行,检测程序运行时间,观察并记录结果和发现。

前stop个随机放能放的位置,然后stop+1开始用回溯法放。

拉斯维加斯:比如四皇后,按回溯法第一个本该放在第一行第一列那个位置,现在用y数组保存第一行能放的位置,1、2、3、4都可以,y[]={1,2,3,4}。然后生成一个y数组内所有数范围内的随机数,比如2,那么现在第一个就放在了第一行第2列的位置。然后下一行(是按行一个一个放,第一个就是第一行那个,第二个就是第二行那个)就找能放的位置,第1、2、3列由于冲突对角线和列都不能放,y[]={4},就只能放在第二行第4列了(拿四皇后做例子是有点少哦)。

#include <iostream>    
#include <cmath>     
#include <time.h>
#include "RandomNumber.h"     
using namespace std;    
  
class Queen  
{  
    friend bool nQueen(int,int);  
private:  
    bool Place(int k);//测试皇后k置于第x[k]列的合法性  
    bool Backtrack(int t);//解n后问题的回溯法  
    bool QueensLV(int stopVegas);//随机放置n个皇后拉斯维加斯算法  
    int n,*x,*y,sv;  
};  
  
bool Queen::Place(int k)  
{//测试皇后k置于第x[k]列的合法性 (第k行,第x[k]列) 
    for(int j=1;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值