南京理工大学紫金学院 VC++课程设计报告 2011 年 12 月 课 程 : VC++课 程 设 计 系 别 : 计 算 机 系 班 级 : 学 号 : 姓 名 : 选 题 名 称 : 八 皇 后 问 题 选 题 难 易 别 : B 级 起 止 时 间 : 2011.11.21~2011.12.22 指 导 教 师 : * * 1. 程序功能介绍 答:这个程序是用于解决八皇后问题的。八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。做这个课题,重要的就是先搞清楚哪个位置是合法的放皇后的位置,哪个不能,要先判断,后放置。我的程序进入时会让使用者选择程序的功能,选【1】将会通过使用者自己手动输入第一个皇后的坐标后获得答案;选【2】将会让程序自动运算出固定每一个皇后后所有的排列结果。 2. 课程设计要求 答:(1)增加函数,完成每输入一组解,暂停屏幕,显示“按任意键继续!”。 (2)完善程序,编程计算八皇后问题共有集中排列方案。 (3)增加输入,显示在第一个皇后确定后,共有几组排列。 (4)将每组解的期盼横向排列输出在屏幕上,将五个棋盘并排排列,即一次8 行同时输出5 个棋盘,同样完成一组解后屏幕暂停,按任意键继续。 (5)求出在什么位置固定一个皇后后,解的数量最多,在什么位置固定皇后后,解的数量最少,最多的解是多少,最少的解是多少,并将最多,最少解的皇后位置及所有的解求出,同样5 个一组显示。 3. 对课程题目的分析与注释 答:众所周知的八皇后问题是一个非常古老的问题,问题要求在一个8* 8的棋盘上放上8个皇后,使得每一个皇后既 攻 击 不到 另 外 七 个皇后,也 不被另 外 七 个皇后所攻 击 。按照 国 际象 棋的规 则 ,一个皇后可 以 攻 击 与之 处 在同一行或同一列或同一斜线上的其 他 任何 棋子 。因此 ,本 课程设计的目的也 是通过用C++语 言 平 台 在一个8* 8的棋盘上放上8个皇后,使得每一个皇后既 攻 击 不到 另 外 七 个皇后,也 不被另 外 七 个皇后所攻 击 的92 种 结构 予 以 实 现 。使用递 归 方法最终 将其 问题变 得一目了 然 ,更 加易 懂 。首 先要用到 类 ,将程序合理 化 :我编辑 了 一个盘棋8*8 的类 :class Board,还 有个回 溯 法的类 :class Stack,关 键的类 好 了 ,然 后编辑 好 类 的成员 ,然 后编辑 主 函数利 ...