当前位置: 首页 > 编程日记 > 正文

n后问题-回溯法

问题描述:

在n*n的棋盘上放置彼此不受攻击的n个皇后。按国际象棋的规则,皇后可以与之处在同一行或者同一列或同一斜线上的棋子。

n后问题等价于在n*n格的棋盘上放置n皇后,任何2个皇后不放在同一行或同一列的斜线上。

算法设计:

|i-k|=|j-l|成立,就说明2个皇后在同一条斜线上。可以设计一个place函数,测试是否满足这个条件。

1 当i>n时,算法搜索至叶节点,得到一个新的n皇后互不攻击放置方案,当前已找到的可行方案sum加1.

2 当i<=n时,当前扩展结点Z是解空间中的内部结点。该结点有x[i]=1,2,3....n共n个儿子节点。

对当前扩展结点Z的每个儿子节点,由place检察其可行性。并以深度优先的方式递归地对可行子树,或剪去不可行子树。

算法描述:

#include <iostream>
#include <cstdlib>
using namespace std;
class Queen{friend int nQueen(int);
private:bool Place(int k);void Backtrack(int t);int n,* x;long sum;
};
bool Queen::Place(int k)
{for(int j=1;j<k;j++)if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))return false;return true;
}
void Queen::Backtrack(int t)
{if(t>n)sum++;elsefor(int i=1;i<=n;i++){x[t] = i;if(Place(t))Backtrack(t+1);}
}
int nQueen(int n)
{Queen X;X.n = n;X.sum = 0;int *p = new int [n+1];for(int i=0;i<=n;i++)p[i] = 0;X.x = p;X.Backtrack(1);delete [] p;cout<<X.sum<<endl;return X.sum;
}
int main()
{nQueen(4);nQueen(2);nQueen(3);return 0;
}

执行结果:

迭代回溯:

数组x记录了解空间树中从根到当前扩展结点的路径,这些信息已包含了回溯法在回溯时所需要的信息。利用数组x所含的信息,可将上述回溯法表示成非递归形式,进一步省去O(n)递归栈空间。

n后问题的非递归迭代回溯法Backtrack可描述如下:

#include <iostream>
#include <cstdlib>
using namespace std;
class Queen{friend int nQueen(int);
private:bool Place(int k);void Backtrack(void);//.........int n,* x;long sum;
};
bool Queen::Place(int k)
{for(int j=1;j<k;j++)if( ( abs(k-j) == abs(x[j]-x[k]) ) ||( x[j] == x[k] ) )return false;return true;
}
void Queen::Backtrack(void)//......
{x[1] = 0;int k = 1;while(k>0){x[k]+=1;while( (x[k]<=n) && !(Place(k)) )//k还不是最后的叶子结点,且位置没有冲突x[k] += 1;if(x[k] <= n)if(k == n)//k是叶子结点sum++;else{k++;x[k] = 0;}elsek--;}
}
int nQueen(int n)
{Queen X;X.n = n;X.sum = 0;int *p = new int [n+1];for(int i=0;i<=n;i++)p[i] = 0;X.x = p;X.Backtrack();//......
    delete [] p;cout<<X.sum<<endl;return X.sum;
}
int main()
{nQueen(4);nQueen(2);nQueen(3);return 0;
}

执行结果:

相关文章:

CImg库介绍

转自&#xff1a;http://www.cppprog.com/2009/0424/106.html CImg是一个跨平台的C的图像处理库&#xff0c;提供了加载、处理、显示、保存等一系列功能&#xff0c;其中的图像处理功能尤其强大。 首先&#xff0c;建议先到这里欣赏一下使用CImg代码做的Demo&#xff0c;就是它…

谷歌、阿里们的杀手锏:三大领域,十大深度学习CTR模型演化图谱

作者 | 王喆来源 | 转载自知乎专栏王喆的机器学习笔记今天我们一起回顾一下近3年来的所有主流深度学习CTR模型&#xff0c;也是我工作之余的知识总结&#xff0c;希望能帮大家梳理推荐系统、计算广告领域在深度学习方面的前沿进展。随着微软的Deep Crossing&#xff0c;Google的…

MariaDB 基金会 CEO 宣布将于 10 月 1 日卸任

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 近日&#xff0c;MariaDB 基金会 CEO Otto Keklinen 在官网宣布自己将在今年 10 月 1 日正式卸任 CEO&#xff0c;转而退居后线&#xff0c;以 CEO 特别顾问的身份辅助新 CEO 顺利渡过过渡期。从…

思科生成树命令之debug spanning-tree(本文转载自:www.91ccie.coml

debug spanning-tree 命令&#xff1a;debug spanning-treeno debug spanning-tree功能&#xff1a;打开MSTP 的调试信息&#xff1b;本命令的no 操作为关闭MSTP 调试信息。参数&#xff1a;无命令模式&#xff1a;特权模式使用指南&#xff1a;该命令是MSTP 庞大复杂debug 功能…

CImg库中CImg,CImgList,CImgDisplay三个类的介绍

转自&#xff1a;http://www.cppprog.com/2009/0426/108.html 本文简单介绍了CImg库中的三个大类&#xff1a;CImg,CImgList,CImgDisplay。然后给出了让CImg在HDC上绘图以及与HBITMAP互换的方法&#xff0c;为部署CImg到Windows GUI程序中提供了基本支持。 上回介绍了CImg模板…

这可能是Python面向对象编程的最佳实践

作者 | 崔庆才来源 | 进击的Coder&#xff08;ID:FightingCoder&#xff09;Python 是支持面向对象的&#xff0c;很多情况下使用面向对象编程会使得代码更加容易扩展&#xff0c;并且可维护性更高&#xff0c;但是如果你写的多了或者某一对象非常复杂了&#xff0c;其中的一些…

mysql之 CentOS系统针对mysql参数优化

内核相关参数(/etc/sysctl.conf) 以下参数可以直接放到sysctl.conf文件的末尾&#xff1a; net.core.somaxconn 65535 net.core.netdev_max_backlog 65535 net.ipv4.tcp_max_syn_backlog 65535 加快TCP连接的回收&#xff1a; net.i…

天猫双十一神话恐终结

2011年双十一大促&#xff0c;天猫商城创造了单日33.6亿的促销奇迹&#xff0c;是2010年同日交易额的近4倍。今年双十一即将来临&#xff0c;淘宝还能再创奇迹吗&#xff1f;何玺认为&#xff0c;淘宝双十一的神话恐终结&#xff0c;理由如下。 一、电商促销年消费被透支 年初 …

opencv图像旋转

转自&#xff1a;http://download.csdn.net/source/2642701 /* 程序名&#xff1a;rotate.c 功能&#xff1a;读入图像文件&#xff0c;做图像旋转转&#xff0c;然后显示图像在屏幕上 */ #include <stdlib.h> #include <stdio.h> #include <math.h> #inclu…

机器如何读懂人心:Keras实现Self-Attention文本分类

作者 | 小宋是呢转载自CSDN博客一、Self-Attention概念详解了解了模型大致原理&#xff0c;我们可以详细的看一下究竟Self-Attention结构是怎样的。其基本结构如下对于self-attention来讲&#xff0c;Q(Query), K(Key), V(Value)三个矩阵均来自同一输入&#xff0c;首先我们要计…

通俗易懂!使用Excel和TF实现Transformer

作者 | 石晓文转载自小小挖掘机&#xff08;ID:wAIsjwj&#xff09;本文旨在通过最通俗易懂的过程来详解Transformer的每个步骤&#xff01;假设我们在做一个从中文翻译到英文的过程&#xff0c;我们的词表很简单如下&#xff1a;中文词表&#xff1a;[机、器、学、习] 英文词表…

通过注册表修改VC6.0的字体【转】

2019独角兽企业重金招聘Python工程师标准>>> 在VC6.0下更改字体&#xff0c;我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的字体和字体颜色是空的&#xff0c;无法选择 所以我想起来通过注册表来更改。 WinR输入“Regedit”&…

Java中创建String的两种方式差异

我们知道创建一个String类型的变量一般有以下两种方法&#xff1a; String str1 "abcd"; String str2 new String("abcd"); 那么为什么会存在这两种创建方式呢&#xff0c;它们在内存中的表现形式各有什么区别&#xff1f; 方法1&#xff1a; String a …

OpenCV支持的图像格式

OpenCV目前支持的图像格式包括&#xff1a; Windows位图文件 - BMP, DIB&#xff1b; JPEG文件 - JPEG, JPG, JPE&#xff1b; 便携式网络图片 - PNG&#xff1b; 便携式图像格式 - PBM&#xff0c;PGM&#xff0c;PPM&#xff1b; Sun rasters - SR&#xff0c;RAS&#xff…

Debian Linux下的Python学习——控制流

python中有三种控制流语句:if、for和while。 1. if语句用法( if..elif..else) 代码: 运行: 注意:raw_input函数要求输入一个字符串,int把这个字符串转换为整数 2.for语句用法 (for ... else) 代码: 运行: 注:else部分是可选的。如果包含else&#xff0c;它总是在for循环结束后…

如何运行ImageMagick的命令行工具

在http://www.imagemagick.org/script/index.php网站下载相应的执行文件&#xff0c;这里以下载ImageMagick-6.6.5-10-Q16-windows-static.exe为例说明。 将ImageMagick-6.6.5-10-Q16-windows-static.exe下载后&#xff0c;安装&#xff0c;然后将其中需要的命令行工具考到你需…

华为最强自研NPU问世,麒麟810“抛弃”寒武纪

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“能效高、算子多、精度高”&#xff0c;华为消费者业务手机产品线总裁何刚用一句话总结了自研达芬奇架构给最新麒麟810芯片带来的变化。6 月 21 日&#xff0c;在 HUAWEI Nova 5 系列新品发布会上&#x…

调用 微信接口报错 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}...

如下截图&#xff0c;仅为备份&#xff0c;本文转载地址&#xff1a; http://www.cnblogs.com/liaolongjun/p/6080240.html 以下正文↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑…

javascript this用法小结

this是面向对象语言中的一个重要概念&#xff0c;在JAVA,C#等大型语言中&#xff0c;this固定指向运行时的当前对象。但是在javascript中&#xff0c;由于 javascript的动态性&#xff08;解释执行&#xff0c;当然也有简单的预编译过程&#xff09;&#xff0c;this的指向在运…

在vc6控制台程序中如何调用运行ImageMagick命令行工具

在http://www.imagemagick.org/script/index.php网站下载相应的执行文件&#xff0c;这里以下载ImageMagick-6.6.5-10-Q16-windows-static.exe为例说明。 将ImageMagick-6.6.5-10-Q16-windows-static.exe下载后&#xff0c;安装&#xff0c;然后将其中需要的命令行工具考到你程…

高频数据交换下Flutter与ReactNative的对比

后端使用go写的socketio服务模拟期货行情数据&#xff0c;每10ms推送10条行情数据 ReactNative已经尽力优化了。 Flutter由于没flutter-socketio这个库不支持dart2.0以上的版本&#xff0c;所有用了安卓的socketio&#xff0c;通过事件与Flutter通讯。 1.内存占用 ReactNative …

6月技术福利限时免费领

《程序员大本营》6月刊来啦~更多福利限时免费领取&#xff1a;CSDN重磅技术大会精选视频以及200PPT&#xff1b;机器学习、知识图谱、计算机视觉、区块链等100技术公开课及PPT全奉送...识别海报二维码&#xff0c;邀请3位好友扫码助力&#xff0c;即可免费领取↓↓↓❤提示&…

我对bgwriter.c 与 guc 关系的初步理解

我用例子来说明&#xff1a;只是一个模拟&#xff0c;我自己做的 假的 bgwriter.c [rootlocalhost test]# cat bgwriter.c #include<stdio.h> #include<stdlib.h> #include<signal.h> #include "bgwriter.h" #include "guc.h" //some co…

媲美Pandas?一文入门Python的Datatable操作

作者 | Parul Pandey译者 | linstancy责编 | Jane出品 | Python大本营&#xff08;id&#xff1a;pythonnews&#xff09;【导读】工具包 datatable 的功能特征与 Pandas 非常类似&#xff0c;但更侧重于速度以及对大数据的支持。此外&#xff0c;datatable 还致力于实现更好的…

java并发编程——并发容器类介绍

2019独角兽企业重金招聘Python工程师标准>>> 并发容器的简单介绍 JDK5中添加了新的concurrent包&#xff0c;相对同步容器而言&#xff0c;并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了&#xff0c;这样保证了线程的安全性&a…

CV_IMAGE_ELEM参数赋值时注意的问题

转自&#xff1a;http://hi.baidu.com/wangruiy01/blog/item/041ab03e8abd33c57d1e71a0.html CV_IMAGE_ELEM是一个宏&#xff0c; #define CV_IMAGE_ELEM( image, elemtype, row, col ) /(((elemtype*)((image)->imageData (image)->widthStep*(row)))[(col)])#define …

公司内部exchange2010 下删除误发邮件

1、Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E20102、get-mailbox | search-mailbox -SearchQuery 填写误发邮件标题 -TargetMailbox "administrator" -TargetFolder "SearchAndDeleteLog" -DeleteContent转载于:https://blog.51cto.com/wo…

从代码设计到应用开发,入坑深度学习看这本书就够了

深度学习&#xff08;Deep Learning&#xff09;是机器学习中一种基于对数据进行表征学习的方法。近年来&#xff0c;深度学习已经在科技界、工业界日益广泛地应用。随着全球各领域多样化数据的极速积累和计算资源的成熟化商业服务&#xff0c;深度学习已经成为人工智能领域最有…

小波矩特征提取matlab代码

这是我上研究生时写的小波矩特征提取代码&#xff1a; %新归一化方法小波矩特征提取---------------------------------------------------------- Fimread(a1.bmp);Fim2bw(F);Fimresize(F,[128 128]);%求取最上点for i1:128 for j1:128 if (F(i,j)1) yt…

hadoop生态搭建(3节点)-06.hbase配置

# http://archive.apache.org/dist/hbase/1.2.4/ # 安装 hbase tar -zxvf ~/hbase-1.2.4-bin.tar.gz -C /usr/local rm –r ~/hbase-1.2.4-bin.tar.gz # 配置环境变量# node1 node2 node3 vi /etc/profile# 在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL下添…