算法 0-1背包问题.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法 0-1背包问题

一、实验目的与要求 掌握回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对回溯法、分支限界法的理解。 要求分别用回溯法和分支限界法求解0-1背包问题; 要求交互输入背包容量,物品重量数组,物品价值数组; 要求显示结果。 二、实验方案 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。 三、实验结果和数据处理 1.用回溯法解决0-1背包问题: 代码: import java.util.*; public class Knapsack { private double[] p,w;//分别代表价值和重量 private int n; private double c,bestp,cp,cw; private int x[]; //记录可选的物品 private int[] cx; public Knapsack (double pp[],double ww[],double cc) { this.p=pp;this.w=ww;this.n=pp.length-1; this.c=cc;this.cp=0;this.cw=0; this.bestp=0; x=new int[ww.length]; cx=new int[pp.length]; } void Knapsack() { backtrack(0); } void backtrack(int i) { if(in) { //判断是否到达了叶子节点 if(cpbestp) { for(int j=0;jx.length;j++) x[j]=cx[j]; bestp=cp; } return; } if(cw+w[i]=c) {//有哪些信誉好的足球投注网站右子树 cx[i]=1; cw+=w[i]; cp+=p[i]; backtrack(i+1); cw-=w[i]; cp-=p[i]; } cx[i]=0; backtrack(i+1); //检查左子树 } void printResult() { System.out.println(回溯法); System.out.println(物品个数:n=4); System.out.println(背包容量:c=7); System.out.println(物品重量数组:w= {3,5,2,1}); System.out.println(物品价值数组:p= {9,10,7,4}); System.out.println(最优值:=+bestp); System.out.println(选中的物品是:); for(int i=0;ix.length;i++) { System.out.print(x[i]+ ); } } public static void main(String[] args) { double p[]={9,10,7,4}; double w[]={3,5,2,1}; int maxweight=7; Knapsack ks=new Knapsack(p,w,maxweight); ks.Knapsack(); //回溯有哪些信誉好的足球投注网站 ks.printResult(); } } 运行结果: 2.用优先队列式分支限界法解决0-1背包问题: 代码: public class Knapsack { static double c; static int n; static double w[];

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档