八皇后问题_Qt_界面程序实现


//核心代码如下
//Queen--放置皇后 #include "queue.h" queue::queue()
{
const int maxn = *;
this->QN = ;
this->board = new bool[maxn];
for (int i = ; i < maxn; i++) {
this->board[i] = false;
}
this->judgeRecursion = true;
this->count = ;
} queue::queue(int N)
{
const int maxn = ;
if (N > || N < )
this->QN = ; //如果不合法就正规化棋盘
else
this->QN = N;
this->board = new bool[maxn];
for (int i = ; i < maxn; ++i) //初始化棋盘,未放置棋子的棋盘设置为false
this->board[i] = false;
this->judgeRecursion = true;
this->count = ;
} bool queue::available (const int Crow, const int Ccol) const //当前行,当前列
{
for (int hor = ; hor < Crow; ++hor) {
//纵向查找
if (board[hor * QN + Ccol]) //已经放置皇后的棋盘处为true
return false; //则返回false--放置不合法
}
int obli = Crow, oblj = Ccol;
while (obli > && oblj > ) {
if (board[(--obli) * QN + (--oblj)])
return false; //左斜上查找
}
obli = Crow, oblj = Ccol;
while (obli > && oblj < QN - ) {
if (board[(--obli) * QN + (++oblj)])
return false; //右斜上查找
}
return true; //都没有,则该位置可以放置皇后
} //打印棋盘
void queue::show (bool *Q)
{
const int maxn = ;
for (int i = ; i < maxn; i++)
Q[i] = this->board[i];
} //重新初始化棋盘
void queue::reset ()
{
const int maxn = ;
for (int i = ; i < maxn; i++)
this->board[i] = false;
this->judgeRecursion = true;
this->count = ;
} void queue::reset (int N)
{
const int maxn = ;
if (N < || N > ) this->QN = ;
else
this->QN = N; for (int i = ; i < maxn; i++)
this->board[i] = false;
this->judgeRecursion = true;
this->count = ;
} queue::~queue ()
{
delete []board;
board = nullptr;
} /**
* @brief queue::answer --- 放置皇后
* @param solu --- 求解的方法数
* @param Crow --- 当前的行数
* @param Q --- 棋盘,用来打印
*/
void queue::answer (int solu, int cur, bool *Q)
{
if (!judgeRecursion) //递归结束,中断
return;
if (cur == QN) { //当前行到最后一行,则一种方案结束
count++;
if (count == solu) { //递归到第solu方案时停止
this->show (Q);
judgeRecursion = false; //停止递归
return;
}
return;
}
else
{
for (int col = ; col < QN; col++)
{
if (available (cur, col)) //检查当前行,列
{
board[cur * QN + col] = true; //合法则放置皇后
answer (solu, cur + , Q); //递归下一行
//如果回溯法中使用了辅助的全局变量,则一定要及时把它们恢复原状.
//特别的,若函数有多个出口,则需在每个出口处恢复被修改的值
board[cur * QN + col] = false;
}
}
}
}
源代码下载地址:链接:https://pan.baidu.com/s/12BTDR8pRMvxpKYNFb988EQ 密码:yk0o
八皇后问题_Qt_界面程序实现的更多相关文章
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- VC版八皇后
一. 功能需求: 1. 可以让玩家摆棋,并让电脑推断是否正确 2. 能让电脑给予帮助(给出全部可能结果) 3. 实现悔棋功能 4. 实现重置功能 5. 加入点按键音效果更佳 二. 整体设计计: 1 ...
- 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题
两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...
- 基于visual Studio2013解决C语言竞赛题之1074八皇后
题目 解决代码及点评 /************************************************************************/ /* ...
- 八皇后问题详细分析与解答(递归法解答,c#语言描述)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或 ...
- C语言数据结构----递归的应用(八皇后问题的具体流程)
本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...
- ACM:回溯,八皇后问题,素数环
(一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...
- 洛谷 P1219 八皇后【经典DFS,温习搜索】
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- c++(八皇后)
八皇后是一道很具典型性的题目.它的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上,当然也不能在一条右斜线 ...
随机推荐
- SignalR主动通知订阅者示例
html代码: <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script> <scri ...
- requestAnimationFrame,Web中写动画的另一种选择
HTML5/CSS3时代,我们要在web里做动画选择其实已经很多了: 你可以用CSS3的animattion+keyframes; 你也可以用css3的transition; 你还可以用通过在canv ...
- 【kAriOJ】离散数学 构造群码 极大似然法解码
A. 编程题1 构造群码 时间限制 1000 ms 内存限制 65536 KB 题目描述 针对给定H,计算群码编码函数eH,并计算给定字的码字. 输入格式 第一行输入两个整数m,n:(m < n ...
- phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码
需要修改phpmyadmin的配置文件,让其连接到MySQL数据库,用记事本打开 config.inc.php 文件 <?php /* Servers configuration */ $i = ...
- Thinking in java学习笔记之String的不可变性
为了提高效率,可以使用StringBuffer或StringBuilder 1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与 ...
- bzoj2086【Poi2010】Blocks
因为long long还有PE的事WA了一下午TAT 考虑一段可行区间的平均值肯定>=k 也就是说将每个数减去k以后,一段可行区间的和非负,求一段最长区间. 一段区间的和肯定是两个前缀和的差 先 ...
- 如何修复Ubuntu 14.04 系统设置丢失的问题
其实遇到这个问题的一个最主要的原因是之前执行过卸载ibus输入法的操作,所以为了避免这个问题请不要卸载ibus输入法,大家依然可以安装fcitx输入法使用. 如果已经出现了这个问题,那该怎么解决呢?很 ...
- MongoDB Node.js driver
Node.js连接MongoDB的简单实例 安装Node.js driver npm install mongodb -save 连接 var MongodbClient = require('mon ...
- css新特性 box-flex/flex 弹性盒状模型
新接触的,可是我的张大神早在2010年就写了box,box-flex的用法 大神把box-flex用狗血电视剧分家产剧情比喻,生动形象地说明,让我理解得容易了些,唉大神好贴心,举例说明满分 ----- ...
- @RequestMapping 用法详解之地址映射(转)
引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio ...