Chinaunix
标题:
求助一个背包算法问题
[打印本页]
作者:
吴秦
时间:
2009-04-05 00:35
标题:
求助一个背包算法问题
下面是我的代码,编译通过。执行时提示断错误,即指针错误。
#include<stdio.h>
#include<stdlib.h>
void sort(float pw[],float p[],float w[]);
void KnapsackGreedy(int N,float w[],float p[],float M,float x[]);
main()
{
int n=3,m=40,i;
float w[]={28,15,24},p[]={35,25,24},x[4];
KnapsackGreedy(n,w,p,m,x);
for(i=1;i<=4;i++)
printf("%f ",x
);
}
void sort(float pw[],float p[],float w[])
{//对物品的单价数组pw按降序排序,注意p和w数组中的位置也要相应的改变
float tempP,tempW,N=3;
int i,j;
for(i=1;i<=N;i++)
{
for(j=1;j<=N-i;j++)
{
if(pw[j]>pw[j+1])
{
tempP=p[j];
p[j]=p[j+1];
p[j+1]=tempP;
tempW=w[j];
w[j]=w[j+1];
w[j+1]=tempW;
}
}
}
}
void KnapsackGreedy(int N,float w[],float p[],float M,float x[])
{/*N为物品种数,w是物品重量数组,p是物品价值数组,M是背包的最大容量,x是物品装包数组,0<=x
<=1*/
float mM,pw[N+1];//pw数组存储每个物品的单价
int i;
for(i=1;i<=N;i++)
pw
=p
/w
;//计算每个物品的单价
sort(pw,p,w);//对物品的单价数组pw按降序排序,注意p和w数组中的位置也要相应的改变
i=1;
mM=M;//mM表示当前包的剩余容量
while(w
<mM)
{
x
=1;//完全装包
mM=mM-w
;
i++;
}
x
=mM/w
;//剩下的装包
}
作者:
吴秦
时间:
2009-04-05 00:41
标题:
回复 #1 吴秦 的帖子
我自己已经解决了!不用麻烦大家了
作者:
皇家救星
时间:
2009-04-05 00:53
我这边编译都出错
作者:
zhengyangas
时间:
2009-04-05 12:43
背包 貌似是个很复杂的问题诶!!!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2