标题:这个程序错在哪里?
只看楼主
xianyunyehe
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-10-13
 问题点数:0 回复次数:0 
这个程序错在哪里?

#include <iostream>

void readdata();

void search(int);

void checkmax();

void printresult();

int W=17, n=5; //c: 背包容量;n:物品数

int w[5], v[5]; //w[i]、v[i]:第i件物品的重量和价值

int a[5], max; //a数组存放当前解各物品选取情况;max:记录最大价值

//a[i]=0表示不选第i件物品,a[i]=1表示选第i件物品

main()

{
readdata(); //读入数据

search(0); //递归搜索

printresult();

}

void search(int m)

{

if(m>=n)

checkmax(); //检查当前解是否是可行解,若是则把它的价值与max比较

else

{

a[m]=0; //不选第m件物品

search(m+1); //递归搜索下一件物品

a[m]=1; //选第m件物品

search(m+1); //递归搜索下一件物品

}

}

void checkmax()

{

int i, weight=0, value=0;

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

{

if(a[i]==1) //如果选取了该物品

{

weight = weight + w[i]; //累加重量

value = value + v[i]; //累加价值

}

}

if(weight<=W) //若为可行解

if(value>max) //且价值大于max

max=value; //替换max

}

void readdata()

{

int i;
cout<<"请输入各物品的重量:\n";
for(i=0;i<n;i++)
cin>>w[i];
cout<<endl;
cout<<"请输入各物品的价值:\n";
for(i=0;i<n;i++)
cin>>v[i];
cout<<endl;

}

void printresult()

{ int i;
cout<<"最优解为:\n";
for(i=0;i<n;i++)
cout<<a[i]<<'\t';
cout<<endl<<endl;
cout<<"max value="<<max<<endl<<endl;

}

搜索更多相关主题的帖子: 背包 search include 记录 
2006-10-29 15:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-99528-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.078199 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved