3901130814肖翰算法实验报告5Word文件下载.docx

上传人:b****5 文档编号:20583185 上传时间:2023-01-24 格式:DOCX 页数:9 大小:159KB
下载 相关 举报
3901130814肖翰算法实验报告5Word文件下载.docx_第1页
第1页 / 共9页
3901130814肖翰算法实验报告5Word文件下载.docx_第2页
第2页 / 共9页
3901130814肖翰算法实验报告5Word文件下载.docx_第3页
第3页 / 共9页
3901130814肖翰算法实验报告5Word文件下载.docx_第4页
第4页 / 共9页
3901130814肖翰算法实验报告5Word文件下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

3901130814肖翰算法实验报告5Word文件下载.docx

《3901130814肖翰算法实验报告5Word文件下载.docx》由会员分享,可在线阅读,更多相关《3901130814肖翰算法实验报告5Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。

3901130814肖翰算法实验报告5Word文件下载.docx

二综202实验日期:

2014..12.2

一、实验目的

1)通过实例理解深度优先策略和回溯机制。

2)用2-3个实例验证算法和时间复杂度。

二、实验内容

1)编程实现n皇后问题迭代回溯算法和递归算法。

三、实验方法

回溯法:

在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。

当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。

(其实回溯法就是对隐式图的深度优先搜索算法)。

若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

四、实验步骤

1、将第一个皇后放置在第一行的第一个空格里

2、对于第二行,从第一个空格开始寻找不与第一行的皇后冲突的空格。

找到的第一个不冲突的空格是第2个。

3、对于第三行,这时已经找不到与之前放置的两个皇后不冲突的空格了。

把当前行恢复初始状态,返回到上一行。

4、在当前行皇后所占的空格之后寻找一个不与之前皇后冲突的位置。

有两种情况,如果找打了则把当前行的皇后移动到该位置,然后处理下一行。

如果直到最后当前行的最后一个空格也没有找合适的位置,则把当前行恢复初始状态,继续回溯到上一行。

5、把最后一个皇后成功安置在最后一行,代表找到了一种可行解。

返回步骤4。

6、当需要回溯到第0行(表格之外)的时候代表已经找遍了所有可能的可行解。

代码:

非递归:

#include<

iostream>

usingnamespacestd;

intsum=0;

//解的个数

//判断该位置是否可以

boolplace(intk,intx[]){

for(intj=1;

j<

k;

j++){

if((abs(k-j)==abs(x[k]-x[j]))||x[k]==x[j]){

returnfalse;

}

}

returntrue;

}

//输出解

voidprint(intx[],intn){

cout<

<

n<

"

皇后的第"

<

sum<

"

个解为:

;

for(inti=1;

i<

=n;

i++){

cout<

x[i]<

endl;

voidQueens(intn,intx[]){

intk=1;

x[1]=0;

while(k>

0){

x[k]+=1;

while((x[k]<

=n)&

&

!

(place(k,x)))

x[k]+=1;

if(x[k]<

=n){

if(k==n){

sum++;

print(x,n);

}

else{

k++;

x[k]=0;

else{

k--;

intmain(){

intn;

//皇后的个数

请输入皇后的个数:

cin>

>

n;

//每一列放皇后的位置

int*x=newint[n+1];

for(inti=0;

x[i]=0;

Queens(n,x);

if(sum==0)

皇后无解!

return0;

递归:

#include<

voidQueens(intt,intx[],intn){

if(t>

n){

sum++;

print(x,n);

else{

for(inti=1;

x[t]=i;

if(place(t,x))

Queens(t+1,x,n);

Queens(1,x,n);

五、实验结果

非递归:

实例1:

实例2:

递归:

实例1:

六、实验结论

从实验运行结果来看,无论是递归算法还是非递归算法,程序都能够很好地算出N皇后的解。

七、实验小结

通过这次实验,我明白了回溯法的基本思想,也了解N皇后的求解过程,由于实验难度不大,所以在完成实验的过程中,没有遇到太大的问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1