- 论坛徽章:
- 0
|
5可用积分
下面是我的代码,编译通过。执行时提示断错误,即指针错误。
#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;//剩下的装包
} |
|