免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2697 | 回复: 3
打印 上一主题 下一主题

[C] 求助一个背包算法问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-05 00:35 |只看该作者 |倒序浏览
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;//剩下的装包
}

论坛徽章:
0
2 [报告]
发表于 2009-04-05 00:41 |只看该作者

回复 #1 吴秦 的帖子

我自己已经解决了!不用麻烦大家了

论坛徽章:
0
3 [报告]
发表于 2009-04-05 00:53 |只看该作者
我这边编译都出错

论坛徽章:
0
4 [报告]
发表于 2009-04-05 12:43 |只看该作者
背包 貌似是个很复杂的问题诶!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP