拉斯维加斯算法的一个显著特征就是它所做的随机性决策有可能导致算法找不到所需的解。因此常用一个bool型函数表示拉斯维加斯算法。找到解就返回true,否则返回false。

n后问题典型的有回溯法(n后问题这里不多说),但是也是拉斯维加斯算法的一个很好的例子。(这里用八皇后实例,n后都是可行的)

拉斯维加斯算法的思想如下:在棋盘上相继的各行中随机地放置皇后,并注意放置的合法性,直至n个皇后都相容的放好。

#include<iostream.h>
#include<time.h>
#include<math.h>//随机数类
const unsigned long maxshort=65536L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;
class RandomNumber
{private://当前种子unsigned long randSeed;public:RandomNumber(unsigned long s=0); //构造函数,默认值0表示由系统自动生成种子unsigned short Random(unsigned long n); //产生0到n-1之间的随机数double fRandom(void); //产生[0,1)之间的随机数
};RandomNumber::RandomNumber(unsigned long s)  //产生种子
{if(s==0)randSeed=time(0);  //用系统时间产生种子elserandSeed=s;  //由用户提供种子
}unsigned short RandomNumber::Random(unsigned long n) //产生0到n-1之间的随机整数
{randSeed=multiplier*randSeed+adder;return(unsigned short)((randSeed>>16)%n);
}double RandomNumber::fRandom(void)   //产生[0,1)之间的随机数
{return Random(maxshort)/double(maxshort);
}//---------------------------------------------------------------------------------class Queen
{public:friend void nQueen(int);bool Place(int k);       //测试皇后k放到第x[k]列的合法性bool QueensLV(void);    //随机放置n个皇后拉斯维加斯算法private:int n,x[9],y[9];             //n-皇后个数   x,y-解向量,从x[1][y1]开始
};bool Queen::Place(int k)
{//测试皇后k放到第x[k]列的合法性for(int j=1;j<k;j++)if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))return false;return true;
}bool Queen::QueensLV(void)
{//随机放置n个皇后的拉斯维加斯算法RandomNumber rnd;                //随机数产生器int k=1;                       int count=1;while((k<=n)&&(count>0)){count=0;for(int i=1;i<=n;i++){x[k]=i;if(Place(k)) y[count++]=i;}if(count>0) x[k++]=y[rnd.Random(count)]; //位置随机}return (count>0);     //count>0表示放置成功
}void nQueen(int n)
{//解n后问题的拉斯维加斯算法Queen X;//初始化XX.n=n;//反复调用随机放置n个皇后的拉斯维加斯算法,直至放置成功while(!X.QueensLV());for(int i=1;i<=n;i++) cout<<X.x[i]<<" ";cout<<endl<<endl;//直观的表示int view[9][9];    //初始化"棋盘"int a,b;for(a=1;a<=8;a++)for(b=1;b<=8;b++)view[a][b]=0;for(i=1;i<=n;i++)view[i][X.x[i]]=1;    //1代表有皇后for(a=1;a<=8;a++){for(b=1;b<=8;b++)cout<<view[a][b]<<" ";cout<<endl;}cout<<endl;
}int main()
{int n=8;nQueen(n);return 0;
}

八皇后 拉斯维加斯算法相关推荐

  1. 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)

    转换视角,提炼共性 有时算法本身乍一看是不一样的,而且很不一样,比较结构特点,看不出来有什么共性 如果我们转换下看问题的视角,是否能够找到共性呢 1 ) 对比分书问题和八皇后问题 这两个问题,其实差异 ...

  2. 八皇后BFS算法、DFS算法、A*算法代码理解

    代码参考了Python:DFS/BFS/UCS解决八皇后问题_流动的风与雪的博客-CSDN博客 和Python:GBF/A*算法解决八皇后问题_流动的风与雪的博客-CSDN博客 但是我花了两天时间才看 ...

  3. 八皇后回溯算法原理剖析及其JS实现

    八皇后回溯算法(JS实现) 八皇后算法描述如下: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法! 下面来分析一波,假设此时我 ...

  4. 按照自己的理解用js实现八皇后的算法

    八皇后规则:任意两个棋子都不能处于同一行.同一列或同一斜线上 分析:(下面 将要放的棋子用a表示,已经放下的棋子用b表示) 一.横轴不重复 横轴不重复,也就是说水平方向只能有一个棋子 :所以我们可以采 ...

  5. 程序员面试题精选100题(58)-八皇后问题[算法]

    题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行.同一列或者同一对角斜线上.下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法.请求出总共有多少种摆法 ...

  6. java计算八皇后_八皇后java算法

    public class NQueens {  public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...

  7. 拉斯维加斯算法结合八皇后问题

    #include <iostream> #include <cmath> #include "RandomNumber.h" using namespace ...

  8. 数据结构 - 递归 回溯算法(八皇后问题)

    游戏地址自己写完了可以根据结果去测试一下. 算法分析 八皇后问题算法思路分析 1)第一个皇后先放第一行第一列 2)第二个皇后放在第二行第一列.然后判断是否OK, 如果不OK,继续放在.第二列.第三列. ...

  9. java递归-八皇后问题(回溯算法)

    1.八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任 ...

最新文章

  1. ABAP动态生成内表的三种方法
  2. C语言程序练习-L1-018 大笨钟 (10分)
  3. Android 仪表盘
  4. docker 获取宿主机ip_Docker基础修炼6——网络初探及单机容器间通信
  5. 7-5 表达式转换 (18 分)
  6. 手机号正则_一起刷题学习正则表达式
  7. python中对象的特性_Python深入学习之对象的属性
  8. 春招妥了!资深技术面试官教你这样准备 Java 面试! | CSDN 博文精选
  9. 基于SSM的高校学生实习管理系统
  10. 20道你必须要背会的微服务面试题,面试一定会被问到
  11. 阿里云服务器可不可以转海外服务器
  12. php表格合并_合并表格怎么合并
  13. 螺旋线java_java 小测试,关于画螺旋线的问题.
  14. OpenCV快速入门五:色彩空间转换
  15. java解析excel合并单元格,100%好评!
  16. Idea基本操作攻略
  17. 截取含有中文的字符段
  18. 企业申请AAA企业信用等级认证的4大好处
  19. 欧盟或将成为全球人工智能道德规范引领者
  20. 【代理设置】Linux Windows 系统下各工具设置代理方式笔记(整理中)

热门文章

  1. NDCG(归一化折损累计增益)
  2. 关于录取志愿者培训人员名单的通知
  3. 线性表(链式存储结构)C语言
  4. 英国政府资助!Wave Photonics领导光量子集成电路封装项目
  5. 中国儿童乐园行业市场建设现状分析与营销策略研究报告2022版
  6. 为什么MIPS和MFLOPS不能代表性能?
  7. matlab pca函数怎么用,matlab的pca函数说明
  8. 薛兆丰经济学思维研究:权利在真实生活中的硬度
  9. 三人行-有分享才会有行动
  10. react native fect network request failed