c++八皇后问题 课 程 设 计 报 告
更新时间:2024-03-06 14:33:01 阅读量: 综合文库 文档下载
- 八皇后问题推荐度:
- 相关推荐
八皇后问题
一、 设计任务与目标
在8行8列的棋盘上放置8个皇后,皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子,要使任一个皇后都不能吃掉其他的7个皇后,则需要同时控制同行,同列,同一条对角线的情况,然后当行,列,以及对角线都无皇后时,记录该点。并用“Q”表示皇后的位置,“+”表示其它位置。
二、 方案设计与论证
定义4个具有全局作用域的数组int LineNum[9]; bool a[9], b[15]分别表示第几列的皇后要放的行位置,第几行上是否未放皇后,“/”斜对角线上是否未放皇后,“\\”反斜对角线上是否未放皇后。通过语句“if ( a[j] && b[i+j-2] && c[i-j+7] ) LineNum[i]=j;”判断并实现一枚皇后是否放置安全。然而当第一枚皇后位置放置后,则它所在的行,列,以及对角线的记录状态需要改变后,才能进行下一枚皇后的放置。下一枚皇后判断位置的步骤与第一枚一样,所以可以用递归的方法进行下一枚皇后位置的放置。当第8枚皇后的位置确定后,就跳出递归。之后还要对之前每一个位置记录的情况初始化才能进行下一种放置八皇后的情况。
三、程序框图或流程图,程序清单与调用关系
Int i=1
i>8
否 是 Int j=1; 否 j<9 是 j++ 输出并显示八皇后摆放情况 a[j]&&b[i+j-2]&&c[i-j+7] 是 否 跳出递归 j++ LineNum[i]=j;
a[j]=false; b[i+j-2]=false; c[i-j+7]=false; i++; i-- a[j]=true; b[i+j-2]=true; c[i-j+7]=true;
否 i<2 是
四、全部源程序清单
# include
int LineNum[9]; //第i列的皇后要放的行位置(只用其中的列号1到8) bool a[9]; //a[i]为1表示第i行上尚未放皇后
bool b[15]; //b[i]为1表示第i条斜对角线上尚未放皇后(斜对角线指的
是\状对角线,该对角线上各点的行列号之和i+j为一个常数) bool c[15]; //c[i]为1表示第i条反斜对角线上尚未放皇后(反斜对角线指的是\状对角线,该对角线上各点的行列号之差i-j为一个常数)。 int num=0; //计数器,用于计算方法总数 class bahuanghou {
int i;
public:
bahuanghou(int x) { i=x; }
void solve(int); };
void bahuanghou::solve(int i) { int j;
for(j=1;j<9;j++) {
if(a[j]&&b[i+j-2]&&c[i-j+7]) //用于判断并实现:如果在第j行的第i列上放
置皇后安全的话,则将一枚皇后放置到那儿。
{
LineNum[i]=j; //记录皇后位置 a[j]=false; b[i+j-2]=false;
c[i-j+7]=false; solve(i+1);
a[j]=true;
b[i+j-2]=true; c[i-j+7]=true; }
if(i>8) //摆放皇后之后,若i=8即已放满时则递归出口;否
则通过solve(i+1);进行递归调用。 {
num++; for(int m=1; m<9; m++)
{
for(int n=1; n<9; n++) { }
if(LineNum[m] == n)
cout<<\
}
else
cout<<\
}
cout< for( m=1; m<9; m++) { } for(int n=1; n<9; n++) { } if(LineNum[m] == n) { cout<<\} cout< // system(\暂停以查看结果 } } void main() { bahuanghou huanghou(1); int i; for(i=0;i<9;i++) //初始化一个\空棋盘\{ a[i]=true; } for(i=0;i<15;i++) { b[i]=true; c[i]=true; } huanghou.solve(1); //第1列开始的连续8列上均放上皇后 cout<<\一共有\种方法。\} 五、程序运行的测试与分析 运行结果正确。 六、结论与心得 1. 设计中遇到的问题及解决过程 调试过程中出现一些逻辑和语法错误,但是语法错误容易纠正,而 逻辑错误则比较难纠正。有时会漏掉“,”,“;”,“}”等符号 2. 设计体会和收获。 发现自己也能解决有点复杂的问题。例如如何使用递归函数,以及如何将数据与数据相关的操作关联在一起并封装起来。 七、参考资料 面向对象程序设计 Visual C++ 八、致谢 真诚地感谢编者,解决了实验上遇到的问题。
正在阅读:
c++八皇后问题 课 程 设 计 报 告03-06
基于PLC控制的环形传输分拣系统09-21
水映锦城动迁小区40#住宅楼等工程第一次工地会议纪要(修改稿)09-30
超高模板内脚手架支撑多功能厅施工方案10-06
纳税人资格证明03-31
土方开挖方案 - 图文01-03
指出别人不想赴约的说说02-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- c++
- 皇后
- 问题