已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
八皇后问题代码实现 /*代码解析*/* Code by Slyar */ #include <stdio.h>#include <stdlib.h> #define max 8 int queenmax, sum=0; /* max为棋盘最大坐标 */ void show() /* 输出所有皇后的坐标 */ int i; for(i = 0; i < max; i+) printf(%d,%d) , i, queeni); printf(n); sum+; int check(int n) /* 检查当前列能否放置皇后 */ int i; for(i = 0; i < n; i+) /* 检查横排和对角线上是否可以放置皇后 */ /* /题目的要求是所有皇后不在同一横排、竖排、对角线上。 1、queenn值为竖排号,可看为Y轴上值。 n值为横排号,可看为X轴上值。 2、(1)先从横坐标第n点排开始放皇后,再放第n+1,所有不会同一横坐标点即同一竖排。 (2)queeni = queenn时即y坐标相等,即在同一横排,此时判断不合规则点。 (3)abs(queeni - queenn) = (n - i), 可变形为 (queenn - queeni) /(n - i)=tan45或tan135 由公式可得出,点(n,queenn)与点(i,quueni)在同一条左斜线135或右斜45,即国际象棋上的每个格子的两条斜角线。 3、由2即可得出当前格式是否能放置一个皇后。 */ if(queeni = queenn | abs(queeni - queenn) = (n - i) return 1; return 0; void put(int n) /* 回溯尝试皇后位置,n为横坐标 */ int i; for(i = 0; i < max; i+) queenn = i; /* 将皇后摆到当前循环到的位置 */ if(!check(n) if(n = max - 1) show(); /* 如果全部摆好,则输出所有皇后的坐标 */ else put(n + 1); /* 否则继续摆放下一个皇后 */ int main() put(0); /* 从横坐标为0开始依次尝试 */ printf(TTTTTT-%dn, sum); /system(pause); /while(1); return 0;/*算法系列-回溯算法引言寻找问题的解的一种可靠的方法是首先列出所有候选解,然后依次检查每一个,在检查完所有或部分候选解后,即可找到所需要的解。理论上,当候选解数量有限并且通过检查所有或部分候选解能够得到所需解时,上述方法是可行的。不过,在实际应用中,很少使用这种方法,因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘),即便采用最快的计算机也只能解决规模很小的问题。对候选解进行系统检查的方法有多种,其中回溯和分枝定界法是比较常用的两种方法。按照这两种方法对候选解进行系统检查通常会使问题的求解时间大大减少(无论对于最坏情形还是对于一般情形)。事实上,这些方法可以使我们避免对很大的候选解集合进行检查,同时能够保证算法运行结束时可以找到所需要的解。因此,这些方法通常能够用来求解规模很大的问题。算法思想回溯(backtracking)是一种系统地搜索问题解答的方法。为了实现回溯,首先需要为问题定义一个解空间(solution space),这个空间必须至少包含问题的一个解(可能是最优的)。下一步是组织解空间以便它能被容易地搜索。典型的组织方法是图(迷宫问题)或树(N皇后问题)。一旦定义了解空间的组织方法,这个空间即可按深度优先的方法从开始节点进行搜索。回溯方法的步骤如下:1) 定义一个解空间,它包含问题的解。2) 用适于搜索的方式组织该空间。3) 用深度优先法搜索该空间,利用限界函数避免移动到不可能产生解的子空间。回溯算法的一个有趣的特性是在搜索执行的同时产生解空间。在搜索期间的任何时刻,仅保留从开始节点到当前节点的路径。因此,回溯算法的空间需求为O(从开始节点起最长路径的长度)。这个特性非常重要,因为解空间的大小通常是最长路径长度的指数或阶乘。所以如果要存储全部解空间的话,再多的空间也不够用。算法应用回溯算法的求解过程实质上是一个先序遍历一棵状态树的过程,只是这棵树不是遍历前预先建立的,而是隐含在遍历过程中<<数据结构>>(严蔚敏).回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解的空间树。算法搜索至解的空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。算法框架:1、问题的解空间:应用回溯法解问题时,首先应明确定义问题的解空间。问题的解空间应至少包含一个(最优)解。2、回溯法的基本思想:确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间,这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点,这个新结点就成为一个新的活结点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。换句话说,这个结点不再是一个活结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。运用回溯法解题通常包含以下三个步骤:(1)针对所给问题,定义问题的解空间;(2)确定易于搜索的解空间结构;(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。3、递归回溯:由于回溯法是对解的空间的深度优先搜索,因此在一般情况下可用递归函数来实现回溯法如下:void backtrace(int i) for (int j=下界;j<上界;j+) matrixi = j; /可行满足限界函数和约束条件 if ( 可行() /置值 if (i>n) /中止搜索并输出结果; backtrace(i+1); 说明:i是递归深度;n是深度控制,即解空间树的高度;可行性判断有两方面的内容:不满约束条件则剪去相应子树;若限界函数越界,也剪去相应子树;两者均满足则进入下一层;搜索:全面访问所有可能的情况,分为两种:不考虑给定问题的特有性质,按事先设好的顺序,依次运用规则,即盲目搜索的方法;另一种则考虑问题给定的特有性质,选用合适的规则,提高搜索的效率,即启发式的搜索。*/#include <stdlib.h>#include <stdio.h>int queen8;int sum = 0;void show() int i; for(i=0; i<8; i+) fprintf(stdout,(%d,%d),i,queeni); printf(n); sum+;int testQueenPosition(int n) int i; for(i=0; i<n; i+) if(queenn = queeni) | abs( (queenn - queeni) /(n - i) ) = 1 ) return 1; return 0;int eightQueen(int n) int i; for(i=0; i<8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 19792-2025农业灌溉设备水动化肥-农药注入泵
- 2025年威海市荣成市保安员招聘考试题库附答案解析
- 2025年出租车驾驶员技能测试卷
- 钢筋工安全教育培训试题及答案
- 2025年亚健康管理与干预项目可行性研究报告及总结分析
- 2025年智慧城市交通系统优化可行性研究报告及总结分析
- 事业单位d类考试试题及答案
- 2025年人工智能辅助医疗服务项目可行性研究报告及总结分析
- 2025年能源管理与优化项目可行性研究报告及总结分析
- 注册会计师考试复习资料
- 大学生职业规划大赛《智能焊接技术专业》生涯发展展示
- 2022浙DT9 民用建筑常用水泵和风机控制电路图
- 2024年江苏公务员考试申论试题(B卷)
- 口腔医学技术课件
- T/BJHWXH 001-2022电动三轮环卫机具技术指引
- 2024年抖音电商年报
- 国内旅游组团社与地接社合同模板
- 高素质农民培训行政第一课
- 小英雄雨来读书分享
- 土地买卖合同参考模板
- 大学语文知到智慧树章节测试课后答案2024年秋南昌大学
评论
0/150
提交评论