蛮力动规贪心回溯法的01背包和TSP问题.doc

蛮力动规贪心回溯法的01背包和TSP问题.doc

ID:59132393

大小:111.00 KB

页数:8页

时间:2020-09-12

蛮力动规贪心回溯法的01背包和TSP问题.doc_第1页
蛮力动规贪心回溯法的01背包和TSP问题.doc_第2页
蛮力动规贪心回溯法的01背包和TSP问题.doc_第3页
蛮力动规贪心回溯法的01背包和TSP问题.doc_第4页
蛮力动规贪心回溯法的01背包和TSP问题.doc_第5页
资源描述:

《蛮力动规贪心回溯法的01背包和TSP问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、华北科技学院计算机学院综合性实验实验报告课程名称算法分析与设计实验学期2014至2015学年第二学期学生所在系部计算机学院年级12级专业班级软件B122班学生姓名周辉学号4任课教师王德志实验成绩计算机学院制《算法分析与设计》课程综合性实验报告开课实验室:计算机基础实验室2015年05月28日实验题目回溯法应用编程一、实验目的:(1)掌握回溯算法求解图问题和组合问题的方法和步骤。(2)理解回溯算法的基本思想。(3)提高学生的编程能力和分析问题、解决问题的能力。二、实验设备及环境:微型计算机、VisualC++/JAVA三、实

2、验内容及要求:实验内容:(1)利用回溯算法,求解TSP问题。A.TSP问题伪代码:输入条件:城市个数n,邻接矩阵a[][]。x[]为当前解,NoEdge=-1表示无穷大。x1[],y1[]为城市的坐标,cc为当前解,bestc为最优解。BackTrack(t)回溯函数。(1)当t!=n时,BackTrack(1),表示从第一个城市出发。如果上一个节点和它此后的节点有边,并且费用不高于现有的最优费用(bestc==NoEdge表示第一次),交换x[t]与x[i]的值,cc=cc+a[x[t-1]][x[t]],递归调用Bac

3、kTrack(i+1)。(2)当t==n时,bestx[i]=x[i],bestc=cc+a[x[n-1]][x[n]]+x[n][1].关键算法:voidBackTrack(intt){//t从2开始if(t==n){//到达第n个节点if(a[x[n-1]][x[n]]!=NoEdge&&(a[x[n]][1]!=NoEdge)&&(cc+a[x[n-1]][x[n]]+a[x[n]][1]

4、

5、bestc==NoEdge)){for(inti=1;i<=n;i++){bestx[i]=x[i];}bestc

6、=cc+a[x[n-1]][x[n]]+a[x[n]][1];//当前最优解}}else{for(inti=t;i<=n;i++){//如果上一个节点和它此后的节点有边,并且费用不高于现有的最优费用(bestc==NoEdge表示第一次)if(a[x[t-1]][x[i]]!=NoEdge&&(cc+a[x[t-1]][x[i]]

7、

8、bestc==NoEdge)){swap(x[t],x[i]);//交换顺序值cc+=a[x[t-1]][x[t]];BackTrack(t+1);//递归调用cc-=a[x[t-

9、1]][x[t]];swap(x[t],x[i]);}k++;}}}(2)利用回溯算法,求解0/1背包问题。B.01背包问题伪代码:输入条件:物品数n,背包重量C,物品重量w[i],价值v[i].(1)从n个物品中选取装入背包的物品,物品i的重量为w[i],价值为v[i]。物品的最高单位重量价值比为p[i]=v[i]/w[i];使用冒泡排序法将p[i]排序。(2)i=0,判断第i个物品的重量是否小于背包重量。如果小于背包重量,将put[i]的值设为1,表示物品可放入背包。物品的总重量为cw=cw+w[i],总价值为cp=c

10、p+v[i],背包C的容量为C-w[i],随后i++,继续将下一个物品装入背包(递归backtrack(i+1))。直到第i个物品的重量装入背包时的重量cw>C,此时进入右子树,转第三步。(3)此时判断右子树的最大价值是否大于当前最优值bestp。若右子树的最大价值大于当前最优值。则递归backtrack(i+1)。当i>n的时候,则从backtrack(i+1)返回。(4)cw=cw-w[i],cp=cp-v[i],此时的cw

11、值bestp,循环次数k。关键代码://回溯函数publicvoidbacktrack(inti){if(i>n){//到达叶子节点bestp=cp;return;//返回上一节点}if(cw+w[i]<=C){//判断物品w[i]是否能装入背包中cw+=w[i];cp+=v[i];put[i]=1;//物品被装入到背包中。k++;backtrack(i+1);//递归调用cw-=w[i];//返回上一个物品的重量cp-=v[i];//返回上一个物品的价值}if(bound(i+1)>bestp){//符合条件搜索右子树k

12、++;backtrack(i+1);}}四、实验结果及分析1、实验运行过程及分析2、运行结果A、01背包问题当背包重量为200时当物品为4个的时候:当物品为10个的时候:TSP问题:当城市为4的时候:当城市为10的时候:01背包问题个算法的比较:TSP各算法的比较:3、心得体会通过这次的算法分析与设计的

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

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

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