n皇后实验报告.docx

n皇后实验报告.docx

ID:58821087

大小:52.57 KB

页数:9页

时间:2020-10-25

n皇后实验报告.docx_第1页
n皇后实验报告.docx_第2页
n皇后实验报告.docx_第3页
n皇后实验报告.docx_第4页
n皇后实验报告.docx_第5页
资源描述:

《n皇后实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验报告实验名称n皇后问题课程名称计算机算法设计与分析专业班级:学生姓名:学号:成绩:指导老师:实验日期:一、实验内容要求在一个n*n的棋盘上放置n个皇后,使得它们彼此不受攻击。一个皇后可以攻击与之处在同一行或同一列或同一斜线上的任何其他棋子。二、实验基本思想典型深度优先遍历,假设某一行为当前状态,不断检查该行所有的位置是否能放一个皇后,检索的状态有两种:(1)先从首位开始检查,如果不能放置,接着检查该行第二个位置,依次检查下去,直到在该行找到一个可以放置一个皇后的地方,然后保存当前状态,转到下一行重复上述方法的检索。(2)如果检查了该行所有的位置均不能放置一个皇后,说明上一行皇后放置的位

2、置无法让所有的皇后找到自己合适的位置,因此就要回溯到上一行,重新检查该皇后位置后面的位置。三、算法设计问题的解可表示为x[1:n],表示皇后i放在棋盘的第i行的第x[i]列。a)x[i]≠x[j],i≠j:不允许将任何两个皇后放在同一列上;b)

3、j-i

4、≠

5、x[j]-x[i]

6、:不允许两个皇后位于同一条斜线上。问题的解空间的形式为:要找出”四皇后”问题的解,最可靠的方法就是把各种情况全部检核一遍,将符合条件A的解找出来。但这样做,你要有相当耐心才行,这是很费时的。采用回溯算法进行求解,在搜索的过程中,将不满足条件要求的分支树减去,可以有效的降低算法的时间复杂性。n后问题的算法描述如下:剪枝

7、函数:boolOk(intt){inti;for(inti=0;i

8、

9、abs(t-i)==abs(x[t]-x[i]))return0;}return1;}voidBacktrack(intt){if(t>=n){cout<<"第"<

10、ck(t+1);}}}一、实验结果五、实验代码#includeusingnamespacestd;int*x;//当前解intn;//皇后的个数Nintsum=1;boolOk(intt)//检查参数所指示的这一行皇后放置方案是否满足要求{inti;for(inti=0;i

11、

12、abs(t-i)==abs(x[t]-x[i]))return0;}return1;}voidBacktrack(intt){if(t>=n){cout<<"第"<

13、;j<=n;j++){if(j==x[i])cout<<"1";elsecout<<"0";}cout<>n;x=(int*)malloc(sizeof(int)*n);Backtrack(0);cout<<"一共的方案数为:"<

14、有跳跃性的搜索算法,是按照深度优先策略,从根节点出发搜索解空间树。算法搜索至某一节点时,利用判断函数先判断该节点内是否包含问题的解,如果不包含则直接跳过,节省时间。相关的判断函数要根据实际问题来编写,此比较适合求解组合数较大的问题。 总的来说,这次实验不仅让我基本掌握递归的思想,而且进一步提高了自己的自学能力和编程能力,使我对算法的分析与设计有更深刻的认识。程序不是一时之事,需要长时间的积累,逐步付诸实践才能真正的掌握,我会继续努力学习,争取做得更好。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。