c支限界算法语言n皇后问题分,n皇后问题(分析)

这道题需要用到回溯算法,现在在这里先简单的介绍一下这个算法:

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:

1、定义一个解空间,它包含问题的解。

2、利用适于搜索的方法组织解空间。

3、利用深度优先法搜索解空间。

4、利用限界函数避免移动到不可能产生解的子空间。

问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。

首先,看一个简单的程序;

#include

#include

void function(int a)

{

if (a > )

{

printf("%d\n", a);

function(a - );

}

}

int main(void)

{

int a = ;

function();

system("PAUSE");

return ;

}

输出:3 2 1

#include

#include

void function(int a)

{

if (a > )

{

function(a - );

printf("%d\n",a);

}

}

int main(void)

{

int a = ;

function();

system("PAUSE");

return ;

}

输出:1 2 3

首先第一个不难理解,第二个,首先进行三次递归,分别是function(2),function(1),function(0)=>a=3,a=2,a=1;当到a=1递归执行结束,就会接着往下执行,执行printf,所以此时输出1,然后,返回到上一级递归,function(1),执行结束后,再次执行printf,输出1...

八皇后问题:

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。

#include

#include

#define max 8//定义最大方格

int a[max],sum=;//定义全局变量

int check_function(int n) { //检查当定一个点时,以行为单位扫描(a[n]为横坐标)遍历其他列的位置是否能满足要求

int i;

for(i=; i

,接着第26~28行代码,相当于将定点纵坐标加一,进行移位操作,然后到check_function函数中进行与上面类似的操作*/

{

if(a[i]==a[n]||abs(a[i]-a[n])==abs(i-n)) { //a[i]==b[n]表示在同一排的情况,后者为在同一对角线上(记住abs求绝对值函数)

return ;//不满足条件返回1

}

}

return ;//满足条件返回0

}

int func(int n) { //定义一个进行对定点改变与输出结果的函数

int i,t;

for(i = ; i < max; i++) {

a[n]=i;//假设的点,当每次满足条件返回1时,会再次进行上面的for循环,对i进行加一操作,相当于对纵坐标操作,下移一位

if(check_function(n)==) { //结合上一个给a[n]赋值,通过判断是否符合条件,让a[n]的值为每一列满足条件的值(纵坐标),n为横坐标

if(n==max-) { //max-1 说的是最后一列,当横坐标数等于最后一列,且满足了检验,就说明这是一组中的最后一个,于是输出满足条件的a[n]

for(t=; t

printf("(%d,%d),",t,a[t]);//这样打印的原因:到这里,每个a[n]实际是满足条件的位置

printf("\n");

sum++;

} else {

func(n+);//若满足了检验,却不满足是最后一项,则说明这只是一组中的一个,且不是最后一个,因为推出结果是按列进行扫描,所以,横坐标向后移一位

}

}

}

}

int main(void) {

func();//定横坐标为零

printf("sum=%d\n",sum);//打印出摆放方式数

return ;

}

0e3849c3f0f67cc0f637bf1b18be007c.png

回溯法——求解N皇后问题

问题描写叙述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后.使其不能互相攻击,即随意的两个皇后不能处在允许行.同一列,或允许斜线上. 能够把八皇后问题拓展 ...

Java 内功修炼 之 数据结构与算法(一)

一.基本认识 1.数据结构与算法的关系? (1)数据结构(data structure): 数据结构指的是 数据与数据 之间的结构关系.比如:数组.队列.哈希.树 等结构. (2)算法: 算法指的是 ...

&lbrack;HDU 2553&rsqb;--N皇后问题&lpar;回溯&rpar;&sol;N皇后问题的分析

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)     ...

八皇后问题详细分析与解答(递归法解答&comma;c&num;语言描述)

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

『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1&period;5 Checker Challenge 八皇后升级版)

本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...

两个NOI题目的启迪8皇后和算24

论出于什么原因和目的,学习C++已经有一个星期左右,从开始就在做NOI的题目,到现在也没有正式的看,不过还是受益良多,毕竟C++是一种”低级的高级语言“,而且NOI ...

OpenJudge1700&colon;八皇后问题 &sol;&sol;不属于基本法的基本玩意

1700:八皇后问题//搜索 总时间限制:  10000ms 内存限制:  65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...

2016HUAS暑假集训题1 H - N皇后问题

Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合 ...

皇后&lpar;queen&rpar;

皇后(queen)[题目描述] 众所不知,rly现在不会玩国际象棋.但是,作为一个OIer,rly当然做过八皇后问题.这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在n*n的方格中摆n个皇后使其互不 ...

随机推荐

Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...

Unity-Animator在Editor状态下的单个&sol;批量预览工具

网上有一个版本,但是调了半天用不了.于是自己动手写了一个 单个预览 批量预览 使用: 下载地址: http://files.cnblogs.com/files/hont/AnimatorClipPre ...

Use XSLT in wix

Following content is directly reprinted from https://installpac.wordpress.com/2012/05/07/conflict-ma ...

Effective C&plus;&plus; 沉思录

1.视C++是一个联邦语言.由C,Object-Oriented C++,Templete C++,和STL组成.其中面对不同的语言,采用不同的规约这样编程效率会提高很多.例如C和STL 都是有C-S ...

mysql存储过程及常用函数

原文:mysql存储过程及常用函数 一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取 ...

VB&period;NET中网络编程的另一种方案----system&period;net中的HttpWebRequest类的使用

VB.NET中网络编程的另一种方案---- system.net中的HttpWebRequest类的使用 在VB.net中进行网络编程,除了我之前写的随笔中的使用WinHttp组件进行编程,还有另一种 ...

socket之解决粘包方法

low方法 import socket,subprocess ip_port=('127.0.0.1',8080) s=socket.socket(socket.AF_INET,socket.SOCK ...

hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)

hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器.大部分应用都不会使用 hostPath Volume,因为这实际上增加了 ...

&quot&semi;《算法导论》之&OpenCurlyQuote;线性表’&quot&semi;:基于动态分配的数组的顺序表

我们利用静态分配的数组来实现的顺序表的局限还是挺大的,主要在于它的容量是预先定好的,用户不能根据自己的需要来改变.如果为了后续用户能够自己调整顺序表的大小,动态地分配数组空间还是很有必要的.基于动态分 ...

文本离散表示(二):新闻语料的one-hot编码

上一篇博客介绍了文本离散表示的one-hot.TF-IDF和n-gram方法,在这篇文章里,我做了一个对新闻文本进行one-hot编码的小实践. 文本的one-hot相对而言比较简单,我用了两种方法, ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android系统相机自动录像,android 调用系统相机录像并保存

1、在AndroidManifest.xml中添加如下代码tools:ignore"ProtectedPermissions" />android:authorities"${applicationId}.provider"android:name"android.support.v4.content.FileProvider"android:exported"false"android:grantUri…

【原创】jpgraph中文乱码问题的解决

php jpgraph库非常强大&#xff0c;可以在后台生成图片 后台生成在需要导出图表型报告的时候非常有用&#xff0c;当然&#xff0c;前端的可视化还是要用highcharts/echarts/anycharts等类库 比较麻烦的是中文乱码问题&#xff0c;有3个地方乱码&#xff1a; legendsetStickLab…

getstring方法android,JSON中optString和getString方法的区别

JSON中optString和getString方法的区别更新时间&#xff1a;2017年07月07日 15:18:24 投稿&#xff1a;mrroptString方法会在对应的key中的值不存在的时候返回一个空字符串&#xff0c;但是getString会抛一个JSONException 。下面通过一段代码给大家介绍JSON中optString和get…

jpanel把原本内容覆盖掉_A5:APP关键词覆盖你该了解哪些

A5:APP关键词覆盖你该了解哪些点击上方蓝字关注我们苹果ios/安卓-各大应用商店ASO优化大全IOS关键词覆盖1、苹果AppStore关键词搜索的权重排序为app标题、副标题>app关键词>app描述>宣传文本及评论(App关键词100字符)。2、如何优化100字符关键词①、根据产品用户画像分…

android音乐播放器音乐加载,Android开源音乐播放器之在线音乐列表自动加载更多...

系列文章前言当咱们的ListView数据比较多时&#xff0c;咱们通常都会选择分页显示&#xff0c;而分页显示就须要一个动做触发加载更多操做&#xff0c;一般咱们会使用上拉加载更多&#xff0c;但我以为不够人性化&#xff0c;由于用户须要手动上拉&#xff0c;因此更加人性化的…

最短路径--Floyd算法

Floyd算法 1.定义概览 Floyd-Warshall算法&#xff08;Floyd-Warshall algorithm&#xff09;是解决任意两点间的最短路径的一种算法&#xff0c;可以正确处理有向图或负权的最短路径问题&#xff0c;同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3)…

vue 打开一个iframe_Vue 之五 —— 单元测试

单元测试&#xff08;unit testing&#xff09;&#xff1a;是指对软件中的最小可测试单元进行检查和验证。代码的终极目标有两个&#xff0c;第一个是实现需求&#xff0c;第二个是提高代码质量和可维护性。单元测试是为了提高代码质量和可维护性&#xff0c;是实现代码的第二…

Hibernate如何存储二级缓存条目

介绍 使用数据库访问抽象层的好处是可以透明地实现缓存&#xff0c;而不会泄漏到业务逻辑代码中 。 Hibernate Persistence Context充当事务后写式高速缓存 &#xff0c;将实体状态转换转换为DML语句。 持久性上下文充当逻辑事务存储&#xff0c;并且每个Entity实例最多可以具…

file协议访问linux,Mozilla Firefox for Android 'file'协议未授权访问漏洞(CVE-2014-1501)

发布日期&#xff1a;2014-03-18更新日期&#xff1a;2014-04-02受影响系统&#xff1a;Mozilla Firefox < 28.0描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 66424CVE(CAN) ID: CVE-2014-1501Firefox是…

dcdc芯片效率不高的原因_半导体厂商如何做芯片的出厂测试?

本文来源于知乎&#xff0c;已获作者授权&#xff0c;谢谢。作者&#xff1a;温戈链接&#xff1a;https://www.zhihu.com/question/20584576/answer/1538640891知乎网友提问&#xff1a;半导体厂商如何做芯片的出厂测试&#xff1f;例如 Intel 的 CPU、手机处理器&#xff0c;…

魅族android n内测报名,不再万年Android 5.0! Flyme安卓N内测招募开启

科客点评&#xff1a;恰逢Flyme五周年庆&#xff0c;这算的是给煤油们最大的礼物。近日&#xff0c;魅族Flyme系统非常活跃&#xff0c;为国内友商操碎了心&#xff0c;为此适配了一众友商热门机型&#xff0c;刷了不少存在感&#xff0c;但这显然不是魅族要搞的“大事情”。6月…

db2数据库连接数 linux_介绍一款数据库管理工具DBeaver

之前连接MySQL一直使用的是navicate&#xff0c;挺好用的&#xff0c;不过是个付费软件&#xff0c;一直想找一款免费开源的软件来替代。今天偶然间发现DBeaver&#xff0c;这是一款基于java开发的数据库工具&#xff0c;而且可以支持Windows、Linux、MacOS多个平台&#xff0c…

jqgrid mvc_jqGrid,REST,AJAX和Spring MVC集成

jqgrid mvc两年多以前&#xff0c;我写了一篇关于如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代…

ChronicleMap –具有堆外内存的Java体系结构

我的上一篇文章是在几周前写的&#xff0c;在收到一些有效的反馈后&#xff0c;我想澄清几点&#xff0c;作为本文的序言。 “ 使用零垃圾创建数百万个对象 ”的主要收获应该是&#xff0c;使用Chronicle&#xff0c;在编写Java程序时&#xff0c;您不会“局限于”使用jvm分配…

下列不属于html5语义元素,HTML5 新的语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分:HTML5中新的语义元素HTML5 元素标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。根据W3C HTML5文档: section 包含了一组内容及其标题。WWFThe World Wide Fund for Nature (WWF) is....HTM…

干加个偏旁可以变成什么字_面试官:“干”字加一笔,变成什么字?回答王和午字不对...

随着大学生的增多&#xff0c;如今的求职者进入职场&#xff0c;想到一份心仪的工作&#xff0c;最让人头疼的就是面试&#xff0c;越来越多的企业都需要全能型的人才&#xff0c;从而在面试的时候不仅要考核专业知识&#xff0c;面试官还要费尽心思出各种各样的题来考验求职者…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

国际站html代码,国际站必须看得懂的HTML代码

国际站必须看得懂的HTML代码國産〇〇柒大家每天都忙着找关键词&#xff0c;忙着写标题&#xff0c;忙着做各种的优化。目的就是想把自己的产品排名到前面&#xff0c;获得更多的曝光&#xff0c;带来更多的询盘。在这个过程中我们是客服同事也是一名搜索优化人员&#xff0c;但…

phoengap–node+websocket在线聊天室

该实验项目基于&#xff1a; phonegapnodewebsocket可以应用于android 和 ios平台。 已经测试通过。以下是测试的图&#xff1a; 首先是用node 架设服务器。 基本上都node 基于websocket的。 主要是对message做处理和判断来进行输出和逻辑处理 而客户都&#xff0c;由于android…

中音萨克斯指法表图_萨克斯的几个特殊指法记忆和几个概念

大家在平常的练习和吹奏的时候&#xff0c;经常会出现找不到相应的指法的情况&#xff0c;有经验的萨友们通过长时间的摸索&#xff0c;会找到其中的一些规律。实际上&#xff0c;能看懂“一图在手&#xff0c;不用再担心找不到指法了”里面的表格&#xff0c;可以起到同样的作…