第一范文网 - 专业文章范例文档资料分享平台

计算机算法设计与分析实验报告

来源:用户分享 时间:2025/6/7 9:43:25 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

15

实验五:分支限界法求解0-1背包问题

一、 实验目的

分支限界法求解0-1背包问题

二、 实验内容

0-1背包问题: 给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。

三、 实验代码

#include #include

#define MaxSize 100 //最多结点数 typedef struct QNode {

float weight; float value; int ceng;

struct QNode *parent; bool leftChild;

}QNode,*qnode; //存放每个结点 typedef struct {

qnode Q[MaxSize]; int front,rear;

}SqQueue; //存放结点的队列 SqQueue sq;

float bestv=0; //最优解

16

int n=0; //实际物品数 float w[MaxSize]; //物品的重量 float v[MaxSize];

//物品的价值

int bestx[MaxSize]; // 存放最优解 qnode bestE;

void InitQueue(SqQueue &sq ) //队列初始化 {

sq.front=1; sq.rear=1; }

bool QueueEmpty(SqQueue sq) //队列是否为空 {

if(sq.front==sq.rear)

return true;

else }

void EnQueue(SqQueue &sq,qnode b)//入队 {

if(sq.front==(sq.rear+1)%MaxSize) { }

sq.Q[sq.rear]=b;

sq.rear=(sq.rear+1)%MaxSize; }

qnode DeQueue(SqQueue &sq)//出队 {

17

return false;

printf(\队列已满!\return ;

qnode e;

if(sq.front==sq.rear) { printf(\队列已空!\ return 0;

}

e=sq.Q[sq.front];

sq.front=(sq.front+1)%MaxSize; return e; }

void EnQueue1(float wt,float vt, int i ,QNode *parent, leftchild) {

qnode b;

if (i==n) //可行叶子结点 { if (vt==bestv) { bestE=parent;

bestx[n]=(leftchild)?1:0;

} return;

}

b=(qnode)malloc(sizeof(QNode)); //非叶子结点 b->weight=wt; b->value=vt; b->ceng=i; b->parent=parent; b->leftChild=leftchild;

18

bool

EnQueue(sq,b); }

void maxLoading(float w[],float v[],int c) {

float wt=0; float vt=0;

int i=1; //当前的扩展结点所在的层 float ew=0; //扩展节点所相应的当前载重量 float ev=0; //扩展结点所相应的价值 qnode e=NULL; qnode t=NULL; InitQueue(sq);

EnQueue(sq,t); //空标志进队列 while (!QueueEmpty(sq)) {

wt=ew+w[i]; vt=ev+v[i]; if (wt <= c) {

if(vt>bestv)

bestv=vt;

EnQueue1(wt,vt,i,e,true); // 左儿子结点进队列

}

EnQueue1(ew,ev,i,e,false); //右儿子总是可行; e=DeQueue(sq); // 取下一扩展结点 if (e == NULL) {

if (QueueEmpty(sq)) break;

EnQueue(sq,NULL); // 同层结点尾部标志

19

搜索更多关于: 计算机算法设计与分析实验报告 的文档
计算机算法设计与分析实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c13quj10z563bj0w6hx0v_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top