八皇后问题数据结构课程设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告

八皇后问题

设计任务书

指导教师(签章):

年月日

摘要:

众所周知的八皇后问题是一个非常古老的问题,具体如下:在8*8的国际象棋棋盘上放置了八个皇后,要求没有一个皇后能吃掉另一个皇后,即任意两个皇后都不处于棋盘的同一行、同一列或同一对角线上,这是做出这个课题的基础。要求编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一个初始位置,输出八皇后问题的一个布局。本次设计旨在学习各种算法,训练对基础知识和基本方法的综合运用及变通能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。

要求熟练运用C++语言、基本算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。通过对题意的分析与计算,用递归法回溯法及枚举法解决八皇后是比较适合的。递归是一种比较简单的且比较古老的算法。回溯法是递归法的升华,在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。而枚举法,更是一种基础易懂简洁的方法。把它们综合起来,就构成了今天的算法。不论用什么法做这个课题,重要的就是先搞清楚哪个位置是合法的放皇后的位置,哪个不能,要先判断,后放置。

关键词:八皇后;递归法;回溯法;数组;枚举法…….

目录

1 课题综述…………………………………………………………………………………

1.1 八皇后问题概述---------------------------------------------------

1.2 预期目标---------------------------------------------------------

1.3 八皇后问题课题要求-----------------------------------------------

1.4 面对的问题-------------------------------------------------------

2 需求分析…………………………………………………………………………………

2.1 涉及到的知识基础--------------------------------------------------

2.2 总体方案----------------------------------------------------------

3 模块及算法设计……………………………………………………………………………………

3.1 算法描述----------------------------------------------------------

3.2.详细流程图-------------------------------------------------------

4.代码编写…………………………………………………………………………

5 程序调试分析……………………………………………………………………………………

6 运行与测试……………………………………………………………………………………

总结…………………………………………………………………………

1 课题综述

1.1 八皇后问题概述

八皇后问题是一个古老而著名的问题。该问题是十九世纪著名的数学家高斯1850提出;在8×8格的国际象棋上摆放八皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后人有人用图论的方法解出92宗结果。虽然问题的关键在于如何判定某个皇后所在的行、列、斜线是否有别的皇后;可以从矩阵的特点上找到规律,如果在同一行,则行号相同;如果在同一列上,则列号相同;如果同在“/”斜线上的行列值之和相同;如果在对角线上,则行列号之和或之差相等,逐个纪录符合题意的情况,最终得出解。(如图1-1,是八皇后问题的一个实例图)

图1-1八皇后棋盘实例

1.2 预期目标

运用C++程序设计的编程思想编写代码,实现八皇后问题的所有(92种)摆放情况。要求在DOS界面上显示出每一种方式。

1.3 八皇后问题课题要求

编写代码,用至少三种方法解决八皇后问题。运行程序后,显现下面的参考界面:

八皇后问题

============

1.方法一

2.方法二

3.方法三

请选择(1、2或3,0:退出):

图1-2输出界面实例

选择一个菜单后,要求输入棋盘的阶层,即N。输入后,显示共有多少种布局方案,并显示每一种方案的具体情况,如下图:

77: (0,2) (1,0) (2,6) (3,4) (4,7) (5,1) (6,3) (7,5)

78: (0,7) (1,1) (2,4) (3,2) (4,0) (5,6) (6,3) (7,5)

图1-3输出样式实例

1.4 面对的问题

需要用三种方法解决八皇后问题,在这里需要查阅大量资料并多加练习,才能成功编写程序。主要要解决下面的问题:

冲突:包括列、行、两条对角线;

1.列:规定每一列放一个皇后,就不会造成列上的冲突;

2.行:当第i行被某个皇后占据时,该行所有空格就都不能放置其他皇后;

3.对角线:对角线有两个方向,在同一对角线上的所有点都不能有冲突。

2 需求分析

2.1 涉及到的知识基础

在本次的课程设计中,用到的知识点主要有:类、函数、选择结构里的条件语句、循环结构里的while语句以及for循环语句、控制语句里的break语句、以及字符串函数的运用等等,并且应用到递归、回溯及穷举等比较经典的算法。

2.1.1 类

2.1.1.1 类定义

类就是用户自定义的数据类型。

类定义的一般形式如下:

class 类名

{

细节;(数据成员,成员函数)

};

2.1.1.2 类函数定义

类成员函数类的成员函数通常在类外定义,一般形式如下:

返回类型类名::函数名(形参表)

{

函数体;

}

相关文档
最新文档