背包问题回溯法c语言程序,C语言回溯法解决背包问题

背包问题回溯法c语言程序,C语言回溯法解决背包问题include include includeusing defineMAXN10 Info intv 价值 intw 重量 doublevw 价值重量比 goods MAXN intn intmaxValue boolsolu MAXN booloptimalS MAXN boolCmp const

#include

#include

#include

using namespace std;

#define MAXN 10

struct Goods_Info

{

int v;//价值

int w;//重量

double vw;//价值重量比

}goods[MAXN];

int n;

int maxValue;

bool solu[MAXN];

bool optimalSolu[MAXN];

bool Cmp(const Goods_Info a, const Goods_Info b)

{

return a.vw > b.vw;

}

//可装入一部分物品时,取得的最优价值

double Bound(int i, double v, int c)

{

//以物品的价值重量比递减将物品装入背包

while (i <= n && goods[i].w <= c)

{

v += goods[i].v;

c -= goods[i].w;

i++;

}

//将背包装满

if (i <= n) { v += (goods[i].vw * c); } return v; } void Backtrack(int k, int cv, int rc) { if (k > n)

{

if (cv > maxValue)

{

maxValue = cv;

int i;

for (i = 1; i <= n; i++)

{

optimalSolu[i] = solu[i];

}

}

}

else

{

if (goods[k].w <= rc) //当前物品能否装入背包 { solu[k] = true; Backtrack(k+1, cv+goods[k].v, rc-goods[k].w); } if (Bound(k+1, cv, rc) > maxValue) //剩余物品的最优价值是否更优

{

solu[k] = false;

Backtrack(k+1, cv, rc);

}

}

}

int main(void)

{

int c;

while (scanf(“%d%d”, &n, &c) != EOF)

{

int i;

for (i = 1; i <= n; i++)

{

scanf(“%d%d”, &goods[i].v, &goods[i].w);

goods[i].vw = (double)goods[i].v / goods[i].w;

}

//将物品按照价值重量比递减排序

sort(goods+1, goods+n+1, Cmp);

maxValue = 0;

Backtrack(1, 0, c);

printf(“%d\n”, maxValue); //最优值

/*

//最优解

printf(“value:”);

for (i = 1; i <= n; i++)

{

printf(“\t%d”, goods[i].v);

}

printf(“\nweight:”);

for (i = 1; i <= n; i++)

{

printf(“\t%d”, goods[i].w);

}

printf(“\nstatus:”);

for (i = 1; i <= n; i++)

{

printf(“\t%d”, optimalSolu[i]);

}

printf(“\n”);

*/

}

return 0;

}

/*5&nbsp278&nbsp312&nbsp710&nbsp58&nbsp415&nbsp95&nbsp278&nbsp812&nbsp1210&nbsp108&nbsp815&nbsp155&nbsp268&nbsp812&nbsp1210&nbsp108&nbsp815&nbsp155&nbsp288&nbsp812&nbsp1210&nbsp108&nbsp815&nbsp155&nbsp298&nbsp812&nbsp1210&nbsp108&nbsp815&nbsp15*/

开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C语言回溯法解决背包问题!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176582.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:34
下一篇 2026年3月26日 下午9:34


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号