c++八皇后问题,源代码,课程设计报告。
2021-06-17 14:30:57 54KB c++八皇后问题
1
包含prolog求解修八皇后问题的实验报告、源代码及试验运行截图
2021-06-13 15:50:11 496KB prolog 八皇后问题 人工智能试验
1
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。
2021-06-11 23:12:18 1.75MB 算法设计
1
遗传算法解决八皇后问题
2021-06-10 15:10:45 14KB 遗传算法 八皇后问题
1
c#八皇后算法演示系统源代码 可保存每一个可能位置为jpg图片
2021-06-09 19:19:17 227KB 算法演示 八皇后问题 c#
1
Matlab写的求解八皇后问题的程序,可以求出全部的92个解
2021-06-01 14:43:06 767B Matlab 八皇后
1
算法设计经典问题集 【题目1】N皇后问题(八皇后问题的扩展) 【题目2】排球队员站位问题 【题目3】把自然数N分解为若干个自然数之和 【题目4】把自然数N分解为若干个自然数之积 【题目5】马的遍历问题 【题目6】加法分式分解 【题目7】地图着色问题 【题目8】在n*n的正方形中放置长为2,宽为1的长条块 【题目9】找迷宫的最短路径。(广度优先搜索算法) 【题目10】火车调度问题 【题目11】农夫过河 【题目12】七段数码管问题。 【题目13】把1-8这8个数放入下图8个格中,要求相邻的格(横,竖,对角线)上填的数不连续 【题目14】在4×4的棋盘上放置8个棋,要求每一行,每一列上只能放置2个 【题目15】迷宫问题.求迷宫的路径.(深度优先搜索法) 【题目16】一笔画问题 【题目17】城市遍历问题 【题目18】棋子移动问题 【题目19】求集合元素问题(1,2x+1,3X+1类)
1
摘要: 八皇后问题要求在一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 而本课程设计本人的目的也是通过用c++语言平台将一个8*8的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现. 使用递归方法最终将其问题变得一目了然,更加易懂。 关键词: 八皇后 ; c++ ; 递归法 目 录 1. 课题综述 1 1. 1课题的来源及意义 1 1. 2 面对的问题 1 2. 需求分析 1 2. 1 涉及到的知识 1 2. 2 软硬件的需求 1 2. 3 功能需求 2 3. 概要设计 2 4. 详细设计和实现 2 4. 1 算法描述及详细流程图 2 4.1.1 算法描述 3 4.1.2 算法流程图 3 5. 代码编写及详细注释 4 6. 程序调试 7 6. 1调试过程、步骤及遇到的问题 7 7. 运行与测试 7 7.1运行演示 7 总 结 9 致 谢 10 参考文献 11 . 1. 课题综述 1. 1课题的来源及意义 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的。 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。 到了现代,随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信心,为我以后的编程开个好头,故我选择了这个有趣的课题。 1. 2 面对的问题 1) 解决冲突问题: 这个问题包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态; 2) 使用数据结构的知识,用递归法解决问题。 2. 需求分析 2. 1 涉及到的知识 本次课程设计中,用到的主要知识有:递归法的运用,for语句的灵活运用,数据结构中树知识的灵活运用、栈及数组的掌握。 2. 2 软硬件的需求 1)系统要求:win98以上操作系统; 2) 语言平台:tc++或vc++6.0; 2. 3 功能需求 当运行程序时,在屏幕上显示每一种方法八个皇后的相对位置,要用比较直观 的界面显示。 3. 概要设计 本课件学生是用循环递归循环来实现的,分别一一测试了每一种摆法,并把它拥有的92种变化表现出来。在这个程序中,我的主要思路以及思想是这样的: 1)解决冲突问题: 这个问题包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态; 对角线:对角线有两个方向。在这我把这两条对角线称为:主对角线和从对角线。在同一对角线上的所有点(设下标为(i,j)),要么(i+j)是常数,要么(i-j)是常数。因此,当第I个皇后占领了第J列后,要同时把以(i+j)、(i-j)为下标的标记置为被占领状态。 2)数据结构的实现 而对于数据结构的实现,学生则是着重于: 数组a[I]:a [I]表示第I个皇后放置的列;I的范围:1..8; 对角线数组:b[j](主对角线),c[j](从对角线),根据程序的运行,去决定主从对角线是否放入皇后; 4. 详细设计和实现 4. 1 算法描述及详细流程图 4.1.1 算法描述 A、 数据初始化。 B、 从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当前位置(n,m)是否等于0(未被占领)。如果是,摆放第n个皇后,并宣布占领(记得姚横列竖列斜列一起设置),接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n8时,便打印出结果。 E、输出函数我使用printf输出,运行形式为:第m种方法为:* * * * * * * *
2021-05-23 22:29:35 185KB 八皇后
1
这里包含有一份完整的八皇后图形演示的源代码,界面很好,程序比较完善,还有实验报告,具有详细的代码注释。基于VS和EasyX实现,需要事先安装EasyX(非常简便快速,试一下就知道了)。
2021-05-23 21:34:31 196KB 八皇后演示
1
实验二 八皇后问题(栈)  实验目的:熟练掌握栈操作的基本算法实现。  实现功能:利用回溯法和栈来实现八皇后问题:在8×8的国际象棋棋盘上,安放8个皇后,要求没有一个皇后能够“吃掉”任何其他一个皇后,即没有两个或两个以上的皇后占据棋盘上的同一行、同一列或同一对角线。  实验机时:4  设计思路: 数据结构: enum boolean { false , true } enum boolean a[9] , b[17] , c[17] ;//检查皇后之间是否冲突 //皇后位置安全性可用逻辑表达式:a[ j ] && b[ i+j ] && c[ i-j+9 ] int s[9]; //s[1..8]表示顺序栈,栈的下标值表示皇后所在的行号,栈的内容是皇后所在的列号。 该算法抽象描述如下: (1) 置当前行当前列均为1; (2) while(当前行号≤8) (3) { 检查当前行,从当前列起逐列试探,寻找安全列号; (4) if ( 找到安全列号 ) (5) 放置皇后,将列号记入栈中,并将下一行置成当前行,第一列置为当前列; (6) else (7) 退栈回溯到上一行,移去该行已放置的皇后,以该皇后所在列的下一列作为当前列; (8) } 结束程序。
1