2014 年春季学期 《C 项目设计》报告 题 目: 八皇后问题 学 号: 092213112 姓 名: 刘泽中 组 名: 1 指导教师: 宋东兴 日 期: 2014.05.15 目 录 正 文 ···················· 3 1.问题描述 ···················· 3 2. 总体设计与分析 ················· 3 3. 相关代码 ···················· 5 4. 调试分析 ···················· 9 5.软件使用说明书 ················ 11 总结 ····················· 11 附录:部分原程序代码 ············· 12 一、 问题描述 1. 八皇后问题: 是一个古老而著名的问题。该问题是十九世纪著名的数学家高斯1850 年提出:在8×8 棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法? 2 .解决八皇后问题的关键在于: (1)找到合理的数据结构存放棋子的摆放位置。 (2)要有合理的冲突检查算法。采用的方法是,先把 8 个棋子摆在棋盘上,每行摆一个,然后去检查这种摆放是否有冲突,如果没有冲突,即找到了一种解决方案。 由于皇后的摆放位置不能通过某种公式来确定,因此对于每个皇后的摆放位置都要进行试探和纠正,这就是“回溯”的思想。在8 个皇后未放置完成前,每行摆放一个皇后,摆放第i 个皇后和第i+1 个皇后的试探方法是相同的,因此完全可以采用递归的方法来处理。 二、总体设计与分析 1.设计效果 画一个8 * 8 的国际象棋盘,在棋盘某一位置上放一棋子,并让它按从左到右的方向 自 动 运 动 ,用户 可以使用光 标 键调 整 棋子运 动 的方向 ,找出所 有可能的摆放方案,将 包 含 指 定的棋子的(如 3 行 4 列)摆放方案找出并显 示出来。。 2.、总体设计 程 序 总体分为 两大 块 :(1)八皇后摆法的寻 找; (2)棋盘及 棋子的设计。 3、详 细 模 块 (1)八皇后摆法的寻 找: int chess[8][8]={0}; //二维 数组 表 示 8*8 棋盘,全部 清 0,(0 代 表 该位没有放棋子) void queen(int i,int n){ //i 表 示 从第i 行起 为 后续 棋子选 择 合适 位置,n 代表 n*n 棋盘 if(i==n) output(n); //输 出棋盘当 前布 局 ; else{ for(...