- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                数据结构 用栈 实现 背包问题
#includeiostream
using namespace std;   
#define  CAPACITY  10;   //设置包的容量 
//#define  MaxSize 10;    //包中可放物品最大数目
struct Myitem
{
  int item_size;
  int item_id;
};
typedef Myitem ElemType;
struct Knapsack
{	
	ElemType item[10];  
	int Length;
    int top;  
};
void InitKnap(Knapsack K);                  //函数1----将包清空
void Push_in(Knapsack K,int item,int id) ;    //函数2----将物品放入包中
void Pop_out(Knapsack K);              //函数3----将最近放进的物品拿出来
void ShowKnap(Knapsack K);          //函数4----依次展示包中的物品
void Knapsack_Solvation(Knapsack K,int Items[],int Len);   //函数5----寻找能刚好占据包所有空间的物品组合
//***主函数***//
void main()
{
	int Len;
	int Items[]={1,3,4,5,6,7};   //准备好物品
	Len=6;
	Knapsack knapSack;
    InitKnap(knapSack);  //初始化
   
	Knapsack_Solvation(knapSack,Items,Len);
     
    //ShowKnap(knapSack);
} 
//函数定义
void InitKnap(Knapsack K)                      //函数1----将包清空
{
   K.top=-1;
   K.Length=0;
}
void Push_in(Knapsack K,Myitem item)               //函数2----将物品放入包中
{ 
		K.top++;
		K.item[K.top]=item;
		K.Length++;	
}
void Pop_out(Knapsack K)               //函数3----将最近放进的物品拿出来
{
   if(K.top==-1)     //下溢         
	  coutStack Underflow!!!endl;
   else
   {
       K.top--;
	   K.Length--;
   }
}
bool Peek(Knapsack K,Myitem myitem)
{
   if(K.top==-1){
		cerr包中空了!endl; 
		 return false;
	}  
	else
	{
      //返回栈顶元素的值
	  myitem=K.item[K.top];
	     return true;
	}
}
void ShowKnap(Knapsack K)               //函数4----依次展示包中的物品
{
	 for(int i=0; iK.Length; i++)
        coutK.item[i].item_size  ;
	 coutendl;
}
void Knapsack_Solvation(Knapsack K,int Items[],int Len)  //函数5----寻找能刚好占据包所有空间的物品组合
{
   Myitem myitem;
   int temp=CAPACITY;
   int i=0;
   while(K.item[0].item_size=7)
   {	
     if(Items[i]=temp)              //将体积小于包当前容量的物品放入包中
	 {
	   myitem.item_size=Items[i];
       myitem.item_id=i;
	   Push_in(K,myitem); 	   
	   
       temp=temp-Items[i]; 
	   
	   if(temp==0)
		   ShowKnap(K);              //输出所得结果
	   i++;
	 }	  
	 else                             //{1,3
                 原创力文档
原创力文档 
                        

文档评论(0)