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