手机版

贪婪法求解背包问题

时间:2025-04-22   来源:未知    
字号:

贪婪法求解背包问题

算法设计与分析

第五章贪婪法的算法实现代码

1、算法1:贪婪法求解背包问题

#include<iostream>

using namespace std;

#define n 10

#define M 30

typedef struct

{

float p;//每个物体的价值

float w;//每个物体的重量

float v;//每个物体的价值重量比

}object;

void swap(object &x,object &y)

{

object t=x;

x=y;

y=t;

}

void bubble(object a[])

{

int i,j;

for(i=n-1;i>0;i--)

for(j=0;j<i;j++)

{

if(a[j].v<a[j+1].v)

swap(a[j],a[j+1]);

}

}

float f(object o[],float d,float x[])

{

int i,j;

for(i=0;i<n;i++)

{

o[i].v=o[i].p/o[i].w;

x[i]=0;

}

float m=M;

bubble(o);

for(int i=0;i<n;i++)

{

贪婪法求解背包问题

cout<<"物体的价值比重是:"<<o[i].v<<"\t";

if((i+1)%2==0)

cout<<endl;

}

for(int j=0;j<n;j++)

{

if(o[j].w<=m)

{

d=d+o[j].p;

m=m-o[j].w;

x[j]=1;

}

else

{

x[j]=m/o[j].w;

d+=x[j]*o[j].p;

break;

}

}

return d;

}

void main()

{

object o[n];

float a[]={3,4,2,5,7,10,1,6,9,8};

float b[]={7,6,6,8,12,15,4,10,14,13};

for(int i=0;i<n;i++)

{

o[i].w=a[i];

o[i].p=b[i];

}

float d=0;

float x[n];

d=f(o,d,x);

cout<<"最优值为:"<<d<<endl;

for(int i=0;i<n;i++)

cout<<"物体的比重为:"<<"x["<<i<<"]="<<x[i]<<"\n";

system("pause");

}

贪婪法求解背包问题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)