计算机算法设计与分析实验报告 华北电力大学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告|
|
实验名称算法设计与分析
课程名称算法设计与分析
|
|
专业班级:学生姓名:
学号:成绩:
指导教师:刘军实验日期:2011-11
}
}
对与n皇后问题
问题的解可表示为x[1:n],表示皇后i放在棋盘的第i行的第x[i]列。
a)x[i]≠x[j] ,i≠j :不允许将任何两个皇后放在同一列上;
b)|j-i|≠|x[j]-x[i]| :不允许两个皇后位于同一条斜线上。
问题的解空间的形式为:
要找出”四皇后”问题的解,最可靠的方法就是把各种情况全部检核一遍,将符合条件A的解找出来。但这样做,你要有相当耐心才行,这是很费时的。采用回溯算法进行求解,在搜索的过程中,将不满足条件要求的分支树减去,可以有效的降低算法的时间复杂性。
算法描述如下:
class Queen
{ friend int nQueen(int);
private:
bool Place(k);
void Backtrack(int t);
int n; //皇后个数
int *x; //当前解
long sum; //当前已找到的可行方案数
};
bool Queen::Place(int k)
{ for(int j=1;j if(abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false; return true; } void Queen::Backtrack(int t) { if(t>n) sum++; else for(int i=1;i<=n;i++) { x[t]=i; if(Place(t)) Backtrack(t+1); } } int nQueen(int n) { Queen x; x.n=n; x.sum=0; int *p=new int[n+1]; for(int i=0;i<=n;i++) p[i]=0; x.x=p; x.Backtrack(1); delete []p; return x.sum; } 三,实验结果 0-1背包 N皇后问题: 四实验心得 这次实验所做的都是老师上课讲过的实例,所以实现起来还是相对比较简单的,但是在做的过程中,我对动态规划法还不是特别的理解,要是让我自己去写一个程序,我感觉还是比较不容易成功的,但是对于这些验证性实验来说,我们还是非常有必要去验证的,只有充分理解这些实验内容,才有可能去做出更好的算法,所谓温故而知新嘛 在实验过程中没有什么非常大的问题,但是如果要刨根问底的去问我的话,问题还是有的,毕竟如果没有资料,凭我的水平,这些程序是写不出来的。可见差距还是很大的,所以我觉得我我需要学习的还是有很多的。