计算机算法设计与分析实验报告 华北电力大学

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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皇后问题:

四实验心得

这次实验所做的都是老师上课讲过的实例,所以实现起来还是相对比较简单的,但是在做的过程中,我对动态规划法还不是特别的理解,要是让我自己去写一个程序,我感觉还是比较不容易成功的,但是对于这些验证性实验来说,我们还是非常有必要去验证的,只有充分理解这些实验内容,才有可能去做出更好的算法,所谓温故而知新嘛

在实验过程中没有什么非常大的问题,但是如果要刨根问底的去问我的话,问题还是有的,毕竟如果没有资料,凭我的水平,这些程序是写不出来的。可见差距还是很大的,所以我觉得我我需要学习的还是有很多的。

相关文档
最新文档