拉斯维加斯类型概率算法的一个显著特征是它所做的随机性选择有可能导致算法找不到问题的解,即算法运行一次,或者得到一个正确的解,或者无解。因此,需要对同一输入实例反复多次运行算法,直到成功地获得问题的解。

【问题描述】设计一个求解n皇后问题的拉斯维加斯型概率算法。

【问题求解】当在第i行放置一个皇后时,可能的列为1-n,产生1-n的随机数j,如果皇后的位置(i,j)发生冲突,继续产生另外一个随机数j,这样最多试探n次。其中任何一次试探成功(不冲突),则继续查找下一个皇后的位置,如果试探超过n次,算法返回false。对应的完整程序如下:

#include <iostream>
#include <stdlib.h> //包含产生随机数的库函数
#include <time.h>
#define N 20 //最多皇后个数
using namespace std;int q[N]; //各皇后所在的列号,(i,q[i])为一个皇后位置
int num = 0; //累计调用的个数
void dispasolution(int n) {  //输出n皇后问题的一个解cout << "第" << num << "次运行找到一个解:" << endl;for (int i = 1; i <= n;i++) {cout << i << q[i];}cout << endl;
}
int randa(int a, int b) { //产生一个[a,b]的随机数return rand() % (b - a + 1) + a;}bool place(int i,int j) { //测试(i,j)为位置能否摆放皇后if (i==1) {               //第一个皇后总是可以放置return true;}int k = 1;while (k<i) {  //k=1~i-1是已放置了皇后的行if ((q[k]==j)||(abs(q[k]-j)==abs(i-k))) {return false;}k++;}return true;
}bool queen(int i,int n) { //放置1~i的皇后int count, j;if (i>n) {dispasolution(n); //所有皇后放置结束return true;}else { count = 0;    //试探次数累计while (count<=n) {//最多试探n次j = randa(1, n); //产生第i行上1到n列的一个随机数jcount++;if (place(i,j)) { //在第i行上找到一个合适位置(i,j)break;}}if (count>n) {return false;}q[i] = j;queen(i + 1, n);}}void main() {int n = 6;           //n为存放实际皇后个数cout << n << "皇后问题求解如下:" << endl;srand((unsigned)time(NULL)); //随机种子while (num<10) {if (queen(1,n)) { //找到一个解退出break;}num++;cout << "第" << num << "次运行没有找到解" << endl;}system("pause");
}

输出结果:

6皇后问题求解如下:
第1次运行没有找到解
第2次运行没有找到解
第3次运行没有找到解
第4次运行没有找到解
第5次运行没有找到解
第6次运行没有找到解
第7次运行没有找到解
第8次运行没有找到解
第9次运行没有找到解
第10次运行没有找到解
请按任意键继续. . .


6皇后问题求解如下:
第1次运行没有找到解
第2次运行没有找到解
第3次运行没有找到解
第4次运行没有找到解
第4次运行找到一个解:
(1,3)(2,6)(3,2)(4,5)(5,1)(6,4)
请按任意键继续. . .

拉斯维加斯类型概率算法-n皇后问题相关推荐

  1. 拉斯维加斯算法与N皇后问题

    拉斯维加斯算法与N皇后问题 拉斯维加斯算法 拉斯维加斯算法不会得到不正确的解.一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解.但有时用拉斯维加斯算法找不到解.与蒙特卡罗算法类似,拉斯维加斯算法找 ...

  2. 拉斯维加斯算法和N皇后问题

    拉斯维加斯算法的一个显著特征是它所作的随机性决策有可能导致算法找不到所需的解.因此通常用一个bool型函数表示拉斯维加斯算法. void Obstinate(InputType x, OutputTy ...

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

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

  4. 【数据结构和算法设计】算法篇(11) 概率算法和近似算法

    文章目录 12.1 概率算法 12.1.1 什么是概率算法 1. 概率算法的特点 2. 概率算法的分类 3. 随机数生成器 12.1.2 蒙特卡罗类型概率算法 12.1.3 拉斯维加斯类型概率算法 1 ...

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

    实验8 拉斯维加斯算法结合回溯法求解n后问题 设stopVgas为采用拉斯维加斯算法随机排设的皇后个数,对n.stopVgas进行多组不同取值时,记录程序成功率.运行时间 ① 参考课件.教材.其它资料 ...

  6. 个人笔记----八皇后(及N*N白黑皇后)

    [八皇后问题]JAVA实现, 相信大家都知道具体题目了,所以这里直接上代码了 一个小菜鸟 看了很久之后,才理解的解法, 还有一个 N*N白黑皇后问题 N*N的方格纸上 N皇后问题, 你用 boolea ...

  7. 海南大学期末复习——算法设计与分析

    目录 引言 算法基础知识 算法的五个特性:(必考) 常用的描述算法的方法: 时间复杂度: 基本的算法设计技术 分治法与减治法 基本思路: 同与异: 适用范围: 应用: 归并排序 快速排序: 堆排序: ...

  8. 《疯狂Java讲义》(第5版) 作者李刚(待重新排版)

    第1章 Java语言概述与开发环境 1.1 Java语言的发展简史 JDK1.0 : Sun在1996年年初发布了JDK 1.0,该版本包括两部分:运行环境(即JRE)和开发环境(即JDK).运行环境 ...

  9. n皇后的拉斯维加斯回溯算法

    <1>.拉斯维加斯概念: 拉斯维加斯算法不会得到不正确的解.一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解.但有时用拉斯维加斯算法会找不到解.拉斯维加斯算法找到正确解的概率随着它所用 ...

最新文章

  1. Kendo UI Web教程分享
  2. mysql释放表空间
  3. Apache Tomcat7+MySQL5.6配置
  4. 定时任务调度系统设计
  5. 腾讯2020校园招聘----逆序对
  6. VB6 中将数据导出到 Excel 提速之法
  7. 计算学生成绩 c语言,c语言项目实战2学生成绩的输入与计算.ppt
  8. 根据Debye公式计算海水介电常数及趋肤深度
  9. 如何用计算机函数计算房租,Excel商铺租金模板,租金每两年递增5%,具备收租期、租赁起止期、单价函数自动计算功能...
  10. MCU学习笔记_ARM Cortex M0_简介
  11. GST pull down实验—gst融合蛋白沉降技术原理
  12. 计算机与home键功能相反的是,home键是什么,虚拟home键如何使用
  13. 关于 Burrows-Wheeler 变换和 Lempel-Ziv 解析的一些认识
  14. 一个柠檬轻松制作环保时钟
  15. centos mysql 大小写_linux 、centos 安装MySQL及踩坑大小写敏感
  16. 手机端别用谷歌了,好用到爆的小众浏览器你确定不试试
  17. 电脑软件没运行,内存爆满可以这样解决
  18. C++ 简单的CPU使用率监控程序
  19. Jace Config
  20. 快速调出multisim里单刀双置开关

热门文章

  1. 树莓派指定挂载点挂载移动硬盘
  2. 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署
  3. 微信小程序-常用api
  4. 数据库设计优化(来自十年经验架构师的课堂)
  5. word文件解除保护模式让其可编辑
  6. 搜狗微信反爬虫机制探讨及应对方法
  7. 使用全局阈值进行灰度图像二值化
  8. 简单工厂(静态工厂)
  9. ETCD 简介及基本用法
  10. 初步接触houdini---零零散散