八皇后课程设计实验报告_C .docx设计任务书
课题
名称
八皇后
调研并熟悉八皇后的基本功能、数据流程与工作规程;
学习八皇后相关的算法和基于 VC++集成环境的编程技术;
设计 通过实际编程加深对基础知问题。该问题是十九世纪著名的数学家高斯 1850 提出;在 8×8格的国际象棋上摆放八皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有
76 种方案。1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后人
有人用图论的方法解出 92 宗结果。虽然问题的关键在于如何判定某个皇后所在
的行、列、斜线是否有别的皇后; 可以从矩阵的特点上找到规律, 如果在同一行,
则行号相同;如果在同一列上,则列号相同;如果同在 “/斜”线上的行列值之和
相同;如果在对角线上,则行列号之和或之差相等,逐个纪录符合题意的情况 , 最终得出解。 (如图 1-1,是八皇后问题的一个实例图 )
图 1-1 八皇后棋盘实例
预期目标
运用 C++程序设计的编程思想编写代码, 实现八皇后问题的所有 ( 92 种)摆放情况。要求在 DOS界面上显示出每一种方式。
八皇后问题课题要求
编写代码,用至少三种方法解决八皇后问题。 运行程序后,显现下面的参考界面:
八皇后问题
============
1.方法一
2.方法二
3.方法三
请选择( 1、2 或 3, 0:退出):
图 1-2 输出界面实例
选择一个菜单后,要求输入棋盘的阶层,即 N。输入后,显示共有多少种布局方
案,并显示每一种方案的具体情况,如下图:
(0,2) (1,0) (2,6) (3,4) (4,7) (5,1) (6,3) (7,5)
(0,7) (1,1) (2,4) (3,2) (4,0) (5,6) (6,3) (7,5)
图 1-3 输出样式实例
面对的问题
需要用三种方法解决八皇后问题, 在这里需要查阅大量资料并多加练习, 才能成功编写程序。主要要解决下面的问题:
冲突:包括列、行、两条对角线;
列:规定每一列放一个皇后,就不会造成列上的冲突;
行:当第 i 行被某个皇后占据时,该行所有空格就都不能放置其他皇后;对角线:对角线有两个方向,在同一对角线上的所有点都不能有冲突。
需求分析
涉及到的知识基础
在本次的课程设计中, 用到的知识点主要有: 类、函数、选择结构里的条件语句、循环结构里的 while 语句以及 for 循环语句、控制语句里的 break 语句、以及字符串函数的运用等等 ,并且应用到递归、回溯及穷举等比较经典的算法。
类
类定义
类就是用户自定义的数据类型。
类定义的一般形式如下:
class 类名
{
细节; (数据成员,成员函数 )
};
类函数定义
类成员函数类的成员函数通常在类外定义,一般形式如下 :
返回类型 类名 ::函数名 (形参表 )
{
函数体 ;
}
双冒号 : :是域运算符,主要用于类的成员函数的定义。
函数
函数的定义
定义函数需要指明:函数执行结果返回值的类型、函数名、形式参数 (简称形参 ) 和函数体。
一般形式为:
数据类型 函数名(行参表)
{
语句序列;
Return 合适类型数值
}
数据类型
规定了函数返回值类型。 党执行函数体中的语句后,通常会产生一个结果,这就是函数的返回值,它可以是任何有效的类型。 若函数执行后不返回值, 数据类型习惯用 void 来表示。如果在函数定义时没有数据类型出现,则默认为函数返回值为整型值 (int) 。
函数调用
调用一个函数之前必须对该函数进行说明。
函数调用由函数名和函数调用运算符 ( )组成, ( )内有 0 个或多个逗号分隔的参数(称为实参 )。每一个参数是一个表达式,且参数的个数与参数的类型要与被调函数定义的参数 (称为形参 )个数和类型匹配。
当被调函数执行时,首先计算实参表达式, 并将结果值传送给行参, 然后执行函数体,返回的返回值被传送到调
八皇后课程设计实验报告 C 来自淘豆网m.daumloan.com转载请标明出处.