//核心代码如下
//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_界面程序实现的更多相关文章

  1. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  2. VC版八皇后

    一.  功能需求: 1. 可以让玩家摆棋,并让电脑推断是否正确 2. 能让电脑给予帮助(给出全部可能结果) 3. 实现悔棋功能 4. 实现重置功能 5. 加入点按键音效果更佳 二.  整体设计计: 1 ...

  3. 比赛组队问题 --- 递归解法 --- java代码 --- 八皇后问题

    两队比赛,甲队为A.B.C3人,乙队为X.Y.Z3人.已知A不和X比,C不和X.Z比,请编程序找出3队赛手名单 采用了与八皇后问题相似的解法,代码如下: 如有疑问请链接八皇后问题的解法:http:// ...

  4. 基于visual Studio2013解决C语言竞赛题之1074八皇后

        题目 解决代码及点评 /************************************************************************/ /* ...

  5. 八皇后问题详细分析与解答(递归法解答,c#语言描述)

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或 ...

  6. C语言数据结构----递归的应用(八皇后问题的具体流程)

    本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...

  7. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...

  8. 洛谷 P1219 八皇后【经典DFS,温习搜索】

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

  9. c++(八皇后)

    八皇后是一道很具典型性的题目.它的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上,当然也不能在一条右斜线 ...

随机推荐

  1. 基于OpenSSL实现C/S架构中的https会话

    在实际生产中实现公司内部的web服务器加密访问时,我们就需要实现公司内部的私钥CA,并且完成对web服务器的签署请求,这样我们就可以在自身的内部机构实现对数据的机密性.完整性.身份验证的访问与传输 实 ...

  2. 腾讯云CentOS Apache开启HTTPS

    1.申请SSL证书 https://console.qcloud.com/ssl?utm_source=yingyongbao&utm_medium=ssl&utm_campaign= ...

  3. 教你一招:Excel中使用vlookup函数查询序列所对应的值

    以一个简单的例子做示范,列数相对较少,看起来也比较清楚:在奥运会或其他比赛上我们可以看到各个国家的奖牌数的变化:那么我们如何查询国家对应的总奖牌数. 我们用到的函数是vlookup,它是一个纵向查询函 ...

  4. android开发之存储数据

    android数据存储之SharedPreferences 一:SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配 ...

  5. <<< Java提取网页源码

    package com.sevennight; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...

  6. 新手理解HTML、CSS、javascript之间的关系

    http://www.cnblogs.com/dreamingbaobei/p/5062901.html 工作多年,一直忙忙碌碌的应用各种技术,现在不忙了,问问自己究竟在做什么,究竟会什么竟答不上来, ...

  7. Java的生日

    你知道巴西的税务系统,亚马逊的Kindle阅读器以及韩国的第一大镁板制造厂有什么共同点吗?乍一看上去,这简直就是风马牛不相及,但是这些系统同世界上其它100亿个设备共享一个元素,那就是Java. 19 ...

  8. Solr学习总结(七)Solr搜索引擎的整体架构

    经过前面一段时间的努力,终于把我所知道的关于solr 的内容都总结完了.前面讲到了solr 的安装配置,web管理后台的使用,solr 的查询参数和查询语法,还说到了solr的客户端 solrnet  ...

  9. CSS3中的动画功能(二)

    上一篇文章讲解了css3动画中的一个即transitions,那么今天来说说另外一个animations.和transitions不同的是animations可以定义多个关键帧以及每个关键帧中元素的属 ...

  10. 浅谈Android中的startActivityForResult和setResult方法

    引言 我们知道,如果想打开一个新的Activity我们可以使用startActivity方法.今天我们介绍的startActivityForResult不仅可以打开全新的Activity,而且当新的A ...