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


//核心代码如下
//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
八皇后问题动态演示_Qt5实现的更多相关文章
- C#中八皇后问题的递归解法——N皇后
百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...
- java递归求八皇后问题解法
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- 八皇后问题——列出所有的解,可推至N皇后
<数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...
- 题目---汉诺塔及AI代码及八皇后
2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
- Python解决八皇后问题
最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...
随机推荐
- SSO的定义、原理、组件及应用
定义: https://baike.baidu.com/item/SSO/3451380 原理: https://blog.csdn.net/cutesource/article/details/58 ...
- SpringMVC一例 是否需要重定向
在ASP.NET MVC下: return view("List") 和 return RedirectToAction("List") 百度知道的最佳答案: ...
- jvm学习二:类加载器
前一节详细的聊了一下类的加载过程,本节聊一聊类的加载工具,类加载器 --- ClassLoader 本想自己写的,查资料的时候查到一篇大神的文章,写的十分详细 大家直接过去看吧http://blo ...
- 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...
- MySQL在Read Uncommitted级别下写操作加X锁
很多文章认为MySQL在读未提交(Read Uncommitted)的隔离级别下,写操作是不加锁的,然而实际上并不是,在RU级别下,写操作加有X锁. 实践出真知 以前,我也认为RU隔离级别下,写操作不 ...
- python之tkinter使用-消息弹框
# messagebox:消息弹框 # 不断点击按钮,切换各种弹窗 import tkinter as tk from tkinter import messagebox from tk_center ...
- fio 磁盘性能
/fio -ioengine=libaio -bs=32k -direct=1 -thread -rw=randrw -percentage_random=100,0 -size=10G -filen ...
- LOJ114 k大(xiao)异或和(线性基)
构造线性基后将其消至对任意位至多只有一个元素该位为1.于是就可以贪心了,将k拆成二进制就好.注意check一下是否能异或出0. #include<iostream> #include< ...
- BZOJ2008 JSOI2010连通数(floyd+bitset)
一直不明白为什么要用floyd求传递闭包,直接搜不是更快嘛……不过其实可以用bitset优化,方法也比较显然.bitset是真的神奇啊,好多01状态且转移相似的东西都可以用这个优化一下. #inclu ...
- CF-Contest339-614
614A-Link/Cut Tree 比较水,注意64位int仍然可能溢出. #include <cstdio> #include <algorithm> #include & ...