急,分全拿出来了,算法中的背包问题的贪心算法

2025-01-01 10:30:07
推荐回答(6个)
回答1:

#include
#include

#define MAXWEIGHT 20
#define n 3

float pw[n]={0},x[n]={0};
int w[n]={0},p[n]={0};

void sort(int p[],int w[])
{
int temp1,temp2;
float temp;
int i,j;
for(i=0;i {
pw[i]=float(p[i])/w[i];
}

for(i=0;i {
for(j=i+1;j {
if(pw[i] {
temp=pw[i],pw[i]=pw[j],pw[j]=temp;
temp1=p[i],temp2=w[i];
p[i]=p[j],w[i]=w[j];
p[j]=temp1,w[j]=temp2;
}
}

}

}

void GreedyKnapsack(int p[],int w[])
{
int m=MAXWEIGHT,i;
for(i=0;i for(i=0;i {
if(w[i]>m) break;
x[i]=1.0;
m=m-w[i];
}
if(i
}

void main()
{
int i;
printf("请输入每个物体的效益和重量:\n");
for(i=0;i {
cin>>p[i]>>w[i];
}
for(i=0;i {
printf("原物体%d的效益和重量分别为%d,%d:\n",i+1,p[i],w[i]);
}
sort(p,w);
printf("\n\n\n按效益值非递增顺序排列物体:\n");
for(i=0;i {
printf("物体%d的效益和重量分别为%d,%d 效益值为:%f\n",(i+1),p[i],w[i],pw[i]);

}
GreedyKnapsack(p,w);
printf("\n\n\n最优解为:\n");
for(i=0;i {
printf("第%d个物体要放%f:\n",i+1,x[i]);
}

}

这是正确的算法

回答2:

void GreedKnapsack(p,w) 该是
void GreedKnapsack(int p,int w)

回答3:

scanf("%d",w[i]);
scanf("%d",p[i]);
改为:
scanf("%d",&(w[i]));
scanf("%d",&(p[i]));

void sort(w,p)
void GreedKnapsack(p,w)
改为:
void sort(int w,int p)
void GreedKnapsack(int p,int w);

回答4:

你错误太多了啊
大哥
void sort(w,p) 函数定义 变量应该说明类型

另外 可多地方有粗心造成的错误
比如for(i=0;i
你的函数大多没有返回值,又没出现指针,这样的函数有意义么?还有那么多的全局变量..............这一百分我不要了...........你再写写吧

回答5:

#include
#define MAXWEIGHT 30
#define n 4

float pw[n],x[n];
int w[n],p[n];

void sort(int w[], int p[])
{
int temp1,temp2;
int i;
for(i=0;i {
pw[i]=float(p[i])/float(w[i]);
}
for(i=0;i {
for(int j=i+1;j {
if(pw[i] {
temp1=p[i];
temp2=w[i];
p[i]=p[j];
w[i]=w[j];
p[j]=temp1;
w[i]=temp2;
}
}

}

}

void GreedKnapsack(int p[],int w[])
{
int m=MAXWEIGHT;
int i;
for(i=0;i for(i=0;i {
if(w[i]>m) break;
x[i]=1.0;
m=m-w[i];
}
if(i
}

void main()
{
int i;
printf("清输入每个物体的重量和效益:\n");
for(i=0;i {
scanf("%d",&w[i]);
scanf("%d",&p[i]);
}
sort(w,p);
GreedKnapsack(p,w) ;
printf("每个背包的重量和效益分别为:\n");
for(i=0;i {
printf("背包%d的重量和效益分别为%d,%d:\n",i,w[i],p[i]);
}
}
我给你调了一下语法错误,你的程序可以运行了。至于算法问题你还需要自己思考啊,不能总依赖别人啊。

回答6:

函数形参数不能直接这样些
void sort(w,p) ==》void sort(int *w,int *p)

float temp1,,temp2,b[]; b不能这样定义,要么*b,要么直接b==>
float temp1,temp2,b;

sort和GreedKnapsack函数的i,j
没有定义
加一个int i,j;

sort函数的第一个和第二个循环
for(i=0;i
pw[i]=p[i]/w[i]; 这条语句没错但不回返回一个正确的答案改为
pw[i]=((float)p[i])/w[i];

C语言区分大小写,所以N!=n,
for(j=i+1;jfor(j=i+1;j
sort函数的if(pw[i]
main函数里的scanf("%d",w[i]);
scanf("%d",p[i]); 必须是地址
scanf("%d",&w[i]);
scanf("%d",&p[i]);

好了语法方面的都改了,不过我不知道你上面两个函数干什么用,MAIN函数没调用它。问题很大