用贪心算法求解的0-1背包C++源代码

 

贪心算法

#include  
#define  M  100                                     //最多物品数  
  void   sort   (int n,double p[M],double s[M])                   //按价值密度排序  
  {  
  int   j,h,k;  
  double   temp1,temp2,temp3,c[M];  
  for(k=1;k<=n;k++)  
   c[k]=p[k]/s[k];  
  for(h=1;h      for(j=1;j<=n-h;j++)  
        if(c[j]        {
   temp1=p[j];p[j]=p[j+1];p[j+1]=temp1;  
            temp2=s[j];s[j]=s[j+1];s[j+1]=temp2;  
            temp3=c[j];c[j]=c[j+1];c[j+1]=temp3;  
        }  
  };
  void   knapsack(int   n,int C,double p[M],double s[M],int x[M])  
  {
   double c1;                                 //c1为背包剩余可装载重量  
      int   i;  
      sort(n,p,s);                             //物品按价值密度排序  
      c1=C;  
      for(i=1;i<=n;i++)  
   {  
    if(s[i]>c1)break;  
          x[i]=1;                                     //x[i]为1时,物品i在解中  
          c1=c1-s[i];  
   }  
  };
  void   main()  
  {
   int n,i,C,x[M]; 
   char ch;
      double p[M],s[M],totalp=0,totals=0; 
   while(1)
   {
      cout<<"请输入物体个数n:";
      cin>>n ;
   cout<   cout<<"请输入背包容量C:"; 
   cin>>C;
   cout<      for(i=1;i<=n;i++)  
    x[i]=0;   //物品选择情况表初始化为0  
      cout<<"请依次输入物品的重量:"<      for(i=1;i<=n;i++)  
          cin>>s[i];  
      cout<   cout<<"请依次输入物品的价值:"<   for(i=1;i<=n;i++)  
    cin>>p[i];  
      cout<      knapsack (n,C,p,s,x);  
      cout<<"结果表示为:"<   for(i=1;i<=n;i++)    
    cout<<"第"<   cout<   for(i=1;i<=n;i++)    
    cout<<"第"<   cout<   cout<<"向量表示:"<<" (   ";
      for(i=1;i<=n;i++)  
   {  
    cout<          if(x[i]==1)
    {
     totals=totals+s[i];
        totalp=totalp+p[i];
    }
   }  
      cout<<")"<      cout<<"背包的总重量为:"<      cout<<"背包的总价值为:"<   cout<<"按Y或y继续操作,否则按任意键"<   cin>>ch;
   if(ch=='Y'||ch=='y')
    continue;
   else
    break;
   }
  }  
   

你可能感兴趣的:(用贪心算法求解的0-1背包C++源代码)