算法分析回溯法实现0-1背包(c++)_第1页
算法分析回溯法实现0-1背包(c++)_第2页
算法分析回溯法实现0-1背包(c++)_第3页
算法分析回溯法实现0-1背包(c++)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本程序实现0-1背包问题算法 (回溯法) /*本程序实现0-1背包问题算法 (回溯法)*/#include using namespace std;#define MAXSIZE 100#define TRUE 1#define FALSE 0#define ERROR -1typedef float value;typedef float weight;typedef int KeyType; / 定义关键字类型为整数类型typedef struct /元素定义weight w;/重量value v;/价值value q;/单位重量价值int index;/序号bool job;/表示是否被用Bag;typedef struct /定义背包集Bag rMAXSIZE+1;/r0闲置或用作 “ 哨兵单元”int length; /背包个数Bags;int n;/包个数int i;/辅助整型变量 weight c;/背包的容量weight cw;/当前重量value bestp=0;/当前最优价值value cp;/当前价值Bags L;/定义背包集int Partition(Bags &L,int low,int high) /快速排序/ 交换顺序表L中子表rlow.high的记录,枢轴记录到位,并返回其所在位置,此时在它之前(后)的记录均不大于它.int shuzhou; /定义枢轴L.r0=L.rlow; /用第一个记录作为枢轴记录shuzhou=L.rlow.q;while(lowhigh) while(low=shuzhou) -high; L.rlow=L.rhigh; while(lowhigh & L.rlow.q=shuzhou) +low; L.rhigh=L.rlow; L.rlow=L.r0;return low; /Partitionvoid QuickSort(Bags &L,int low,int high) /快速排序/对顺序表Llow .high作快速排序int shuzhou;if(lowhigh) shuzhou=Partition(L,low,high); / 获得枢轴 QuickSort(L,low,(shuzhou-1); /对枢轴前半部分排序 QuickSort(L,(shuzhou+1),high); /对枢轴后半部分排序 /QuickSortvalue bound(int i)/计算上界weight left=c-cw;/剩余容量value bound=cp;/以物品单位重量价值递减顺序装入物品while(i=n&L.ri.w=left) left-=L.ri.w; bound+=L.ri.v; i+;/装满背包if(in)/到达叶子结点 bestp=cp; return ;/搜索子树if(cw+L.ri.wbestp)/进入右子树 backtrack(i+1);/backtrackvoid knapsack(weight c)/0-1背包问题主算法QuickSort(L,1,L.length);backtrack(1);/回溯搜索/knapsackint main()/输入要选择的背包信息cout请输入背包的容量:c; cout请输入背包个数(注意:最大作业数不能超过 100个!):n;if(n100) cout你输入的背包个数太大!endl; return FALSE;L.length=n; cout请输入各个背包的信息: endl;for(i=1;i=n;i+) cout请输入第个iL.ri.w; cout请输入第个iL.ri.v; L.ri.q=L.ri.v/L.ri.w;/单位重量价值 L.ri.index=i;/索引号 coutendl;/执行0-1背包问题主算法knapsack(c);/输出结果for(i=1;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论