//核心代码如下
//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. Splay

    #include <cstdio> #include <iostream> using namespace std; *1e5;//nil表示不存在的节点 ][],flag[] ...

  2. [转]MIDI常识20条

    原文链接:http://www.midifan.com/modulearticle-detailview-488.htm Keyboard杂志老资格编辑Jim Aikin在纪念MIDI诞生20的时候发 ...

  3. 软件工程(FZU2015)赛季得分榜,第七回合

    目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...

  4. __getattitem_ \__setattitem__\__delitem__

    class Foo: def __getitem__(self, item): print('getitem',item) return self.__dict__[item] def __setit ...

  5. RGW 负载均衡和高可用的几个方案对比

    注:在RGW网关主机网卡已经是10Gb的情况下,如下三个方案没有引入LVS:如果RGW是Gb网卡,可以考虑引入LVS做流量负载均衡. RGW部署采用 fastcgi+nginx 扩展性和可配置性更强. ...

  6. MongoDB基础知识

    一.Mongodb简介 Mongodb是基于分布式文件存储的数据库,用C++编写: Mongodb是nosql(not-only-sql)数据库: Mongodb '无状态模式',不用去设计,直接用, ...

  7. Docker使用

    Docker使用注意 关于网络配置   在使用默认的桥接模式下,容器启动后会被分配一个与docker0在同一网段的地址,在容器内部默认显示为eth0,在宿主机上产生一个临时的vethXXX接口. 端口 ...

  8. c# 反射类字段

    //在wpf中动态绘制Grid布局控件中值 需要来动态获取类中的字段数来自动生成Grid列数或者行数, public class models { public Label name { get; s ...

  9. Java框架--jQueryEasyUI

    111------------------------------------------------------------------------------------------------- ...

  10. (转)CPU Cache与内存对齐

    转自:http://blog.csdn.net/zhang_shuai_2011/article/details/38119657 原文如下: 一. CacheCache一般来说,需要关心以下几个方面 ...