ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

贪心思想编程实现背包问题 C语言

2021-01-13 12:31:03  阅读:218  来源: 互联网

标签:wv int double 编程 C语言 bag printf 物品 贪心


#include<stdio.h>
#include<stdlib.h>
//用贪心思想编程实现背包问题。物品数n=5,背包容量c=10,物品重量序列w={2,2,6,5,4},物品价值序列v={6,3,5,4,6}。求最佳装包序列。
struct bagObject
{
int id;
double w;
double v;
double wv;
};
struct bagObject bag[5]={{1,2,6,0},{2,2,3,0},{3,6,5,0},{4,5,4,0},{5,4,6,0}};
double x[5]={0};//最佳装包
int n = 5;//物品数n=5
double c=10;//背包容量c=10
double function();

double function()//0,c
{ double value=0,j=c;//初始价值0,容量10
int i=0;
for(;i<n,j>0;i++){
if(j-bag[i].w>0){
value=value+bag[i].v; j=j-bag[i].w; x[bag[i].id-1]=1;
}else{
value=value+j*bag[i].wv; x[bag[i].id-1]=j/bag[i].w; return value;
}
}
return 0;
}

void main()
{
struct bagObject temp;
for(int i=0;i<n;i++){//算性价比
bag[i].wv=bag[i].w/bag[i].v;
}
/for(int i=0;i<n;i++){
printf(“物品id为:%d”,bag[i].id);
printf(“物品w为:%f”,bag[i].w);
printf(“物品v为:%f”,bag[i].v);
printf(“物品wv为:%f\n”,bag[i].wv);
}//测试1用
/
for(int i=0;i<n;i++){//排序
for(int j=i;j<n;j++){
if(bag[i].wv<bag[j].wv){
temp=bag[i];
bag[i]=bag[j];
bag[j]=temp;
}
}
}
/for(int i=0;i<n;i++){
printf(“物品id为:%d”,bag[i].id);
printf(“物品w为:%f”,bag[i].w);
printf(“物品v为:%f”,bag[i].v);
printf(“物品wv为:%f\n”,bag[i].wv);
}//测试2用
/
double maxValue =function();
printf(“物品装载方案如下:\n”);
for(int i=0;i<n;i++){
printf("%f\t",x[i]);
}
printf("\n最大物品价值为:%f",maxValue);
system(“pause”);
}
在这里插入图片描述

标签:wv,int,double,编程,C语言,bag,printf,物品,贪心
来源: https://blog.csdn.net/qq_44741985/article/details/105812936

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有