八皇后问题动态演示_Qt5实现

  1 //核心代码如下
  2 //Queen--放置皇后
  3
  4 #include "queue.h"
  5
  6 queue::queue()
  7 {
  8     const int maxn = 9*9;
  9     this->QN = 4;
 10     this->board = new bool[maxn];
 11     for (int i = 0; i < maxn; i++) {
 12         this->board[i] = false;
 13     }
 14     this->judgeRecursion = true;
 15     this->count = 0;
 16 }
 17
 18 queue::queue(int N)
 19 {
 20     const int maxn = 81;
 21     if (N > 9 || N < 4)
 22         this->QN = 4;    //如果不合法就正规化棋盘
 23     else
 24         this->QN = N;
 25     this->board = new bool[maxn];
 26     for (int i = 0; i < maxn; ++i)  //初始化棋盘,未放置棋子的棋盘设置为false
 27         this->board[i] = false;
 28     this->judgeRecursion = true;
 29     this->count = 0;
 30 }
 31
 32 bool queue::available (const int Crow, const int Ccol) const  //当前行,当前列
 33 {
 34     for (int hor = 0; hor < Crow; ++hor) {
 35         //纵向查找
 36         if (board[hor * QN + Ccol])     //已经放置皇后的棋盘处为true
 37             return false;               //则返回false--放置不合法
 38     }
 39     int obli = Crow, oblj = Ccol;
 40     while (obli > 0 && oblj > 0) {
 41         if (board[(--obli) * QN + (--oblj)])
 42             return false;              //左斜上查找
 43     }
 44     obli = Crow, oblj = Ccol;
 45     while (obli > 0 && oblj < QN - 1) {
 46         if (board[(--obli) * QN + (++oblj)])
 47             return false;              //右斜上查找
 48     }
 49     return true;                       //都没有,则该位置可以放置皇后
 50 }
 51
 52 //打印棋盘
 53 void queue::show (bool *Q)
 54 {
 55     const int maxn = 81;
 56     for (int i = 0; i < maxn; i++)
 57         Q[i] = this->board[i];
 58 }
 59
 60 //重新初始化棋盘
 61 void queue::reset ()
 62 {
 63     const int maxn = 81;
 64     for (int i = 0; i < maxn; i++)
 65         this->board[i] = false;
 66     this->judgeRecursion = true;
 67     this->count = 0;
 68 }
 69
 70 void queue::reset (int N)
 71 {
 72     const int maxn = 81;
 73     if (N < 4 || N > 9) this->QN = 4;
 74     else
 75         this->QN = N;
 76
 77     for (int i = 0; i < maxn; i++)
 78         this->board[i] = false;
 79     this->judgeRecursion = true;
 80     this->count = 0;
 81 }
 82
 83 queue::~queue ()
 84 {
 85     delete []board;
 86     board = nullptr;
 87 }
 88
 89 /**
 90  * @brief queue::answer --- 放置皇后
 91  * @param solu --- 求解的方法数
 92  * @param Crow --- 当前的行数
 93  * @param Q --- 棋盘,用来打印
 94  */
 95 void queue::answer (int solu, int cur, bool *Q)
 96 {
 97     if (!judgeRecursion)   //递归结束,中断
 98         return;
 99     if (cur == QN) {                  //当前行到最后一行,则一种方案结束
100         count++;
101         if (count == solu) {          //递归到第solu方案时停止
102             this->show (Q);
103             judgeRecursion = false;   //停止递归
104             return;
105         }
106         return;
107     }
108     else
109     {
110         for (int col = 0; col < QN; col++)
111         {
112             if (available (cur, col))         //检查当前行,列
113             {
114                 board[cur * QN + col] = true; //合法则放置皇后
115                 answer (solu, cur + 1, Q);    //递归下一行
116                 //如果回溯法中使用了辅助的全局变量,则一定要及时把它们恢复原状.
117                 //特别的,若函数有多个出口,则需在每个出口处恢复被修改的值
118                 board[cur * QN + col] = false;
119             }
120         }
121     }
122 }

源代码下载地址:链接:https://pan.baidu.com/s/12BTDR8pRMvxpKYNFb988EQ 密码:yk0o

posted @ 2016-10-06 16:30 douzujun 阅读(...) 评论(...) 编辑 收藏

八皇后问题动态演示_Qt5实现相关推荐

  1. [玩耍]八皇后问题动态演示

    学校组织的计算机技能大赛,题目解八皇后并做程序演示,顺便就贴博客上来. 八皇后问题 简述:8*8的棋盘,有八个皇后,每个皇后不能在同一行同一列同一斜线上,问有多少种可能的摆法.答案是92,这大家都知道 ...

  2. 八皇后问题求解动态图形演示

    这是我以前用Delphi写的一个教学软件.内容是关于"八皇后"问题的求解动态图形演示.这个软件采用多线程设计,包含了递归回溯与非递归回溯两种算法,还可随时调整演示速度,界面共有五种 ...

  3. 【181116】VC++八皇后格子图形演示源程序源代码

    源码下载简介 八皇后VC++格子图形显示演示,搞不懂是怎么一回事,有兴趣的研究一下,类似黑白棋的界面,但运行的时候发觉显然不是黑白棋,棋子按一定规则动画显示,效果图如上. 源码下载地址:点击下载 备用 ...

  4. 对给定的AOV网络,产生所有的拓扑排序结果,并进行解法的动态演示

    数据结构 课程实验报告 实验题目: 33题,对给定的AOV网络,产生所有的拓扑排序结果,并进行解法的动态演示. 实验学时:一周 实验日期: 实验目的:对给定AOV网络,产生所有的拓扑排序结果,并进行动 ...

  5. 八皇后时间复杂度_LeetCode46:全排列(八皇后)

    前言 本系列文章为<leetcode>刷题笔记. 题目位置:力扣中国 项目位置:我的Github项目 题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2, ...

  6. 回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai 更多精彩干货敬请关注! 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 第一次遇到它的时候应该 ...

  7. 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai,关注更多干货和学习资源 记得点赞.在看 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里 ...

  8. 多字段回溯 mysql_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里插入图片描述 第一次遇到它的时候应该是大一下或者大二这个期间,这个时间对 ...

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

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

最新文章

  1. android自定义调节器控件 —— RegulatorView
  2. activemq 连接mysql_ActiveMQ 内存配置,ActiveMQ 和mysql
  3. 中国SaaS死或生之四:卧榻之侧,是谁在捅刀 SaaS?
  4. 具有自适应空间强度约束和隶属度链接的鲁棒模糊c均值聚类算法
  5. (原创)EDK中常用文件
  6. linux系统可以玩星际争霸吧,在Linux下可用Wine安装和运行星际争霸2、水煮三国
  7. java win10 x64下载地址_javawin10 64位
  8. SpringCloud入门简介
  9. 利用计算机为祖国做贡献的人,李晓维:祖国,我把科研事业献给您
  10. android ionic框架,移动App开发框架—Ionic
  11. 9月计算机二级什么时候出成绩,2020年9月计算机二级成绩大概什么时候出来
  12. php工业物联网实现,利用工业物联网网关巧妙实现远程控制
  13. 正版软件 |Windows 10 家庭版操作系统软件 终身授权
  14. Centos 6.9 Install dubbokeeper
  15. 关于Unity3D打包成exe运行后资源无法成功加载的解决方法
  16. checkpoint = torch.load(args.state_dict) ->RuntimeError: CUDA error: out of memory
  17. Java基础学习系列--(七)彻底搞懂java中的【异常、线程】的使用
  18. IT行业岗位以及发展方向(职业规划迷茫的欢迎查看)
  19. Shell脚本生成字典实例分析
  20. EasyGBS定制项目添加“设备标签”模块的代码实现分享

热门文章

  1. PHP实现斐波纳契数列
  2. 1.1计算机网络的应用
  3. (理财一)如何为家庭配置保险
  4. kettle(4.1 TSV文件的抽取)
  5. @OnLifecycleEvent 遭废弃,推荐使用 DefaultLifecycleObserver 替代
  6. 基于Ensp企业网的无线组建与实验的仿真设计
  7. 第三章流程图与文字描述
  8. 《写作的诞生》读后感
  9. HDU 4545 (模拟) 魔法串
  10. JVM全局导图(第一版)