前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >装载问题——优先级队列分支界限法

装载问题——优先级队列分支界限法

作者头像
AI那点小事
发布2020-04-18 00:37:41
6270
发布2020-04-18 00:37:41
举报
文章被收录于专栏:AI那点小事AI那点小事

代码

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <queue> 
using namespace std;

typedef struct node{
	struct node* parent;	//父节点 
	int weight;				//权重 
	bool lchild;			//左儿子标志
	int level;				//当前层数 
	node(struct node* p,int w ,int lev,bool flag){
		this->parent = p;
		this->weight = w;
		this->lchild = flag;
		this->level = lev;
	} 
}Node; 

struct cmp{
	bool operator()(Node *node1,Node *node2){
		return node1->weight<node2->weight;
	}
};

int c;					//最大装载重量
int n;					//装载个数
int bestw = 0; 			//最佳装载重量 
int Ew = 0;				//当前装载重量
int weight[100000];		//每个装载重量 
int r[100000];			//剩余装载数量 
Node *bestE = 0;		//最优解结点
Node *E = 0;			//当前结点 
int best[100000];		//最佳结点数组 
priority_queue<Node*,vector<Node*>,cmp> q;

void AddNode(Node* parent,int weight,int lev,bool flag)
{
	Node* node = new Node(parent,weight,lev,flag);
	q.push(node);
} 

int main()
{
	//初始化相关变量 
	cout<<"请输入最大装载重量:"<<endl; 
	cin>>c;
	cout<<"请输入装载个数:"<<endl;
	cin>>n;
	cout<<"请输入各个装载重量:"<<endl;
	for(int i = 1 ; i <= n ; i++){
		cin>>weight[i];
	}
	memset(best,0,sizeof(best));  
	r[n] = 0;
	for(int i = n-1 ; i > 0 ; i--){
		r[i] = r[i+1]+weight[i+1];
	} 
	/*
	for(int i = 1 ; i <= n ; i++){
		cout<<r[i]<<" ";
	} 
	cout<<endl;*/
	
	//开始进行转载
	int i = 1;
	while(i != n+1){
		int w = Ew+weight[i];
		if(w <= c){//左儿子作为可行结点 
			AddNode(E,w+r[i],i+1,true);
		}
		//右儿子作为潜在可行结点 
		AddNode(E,Ew+r[i],i+1,false);
		E = q.top();
		q.pop();
		i = E->level;
		Ew = E->weight-r[i-1];
		cout<<i<<" "<<E->weight<<" "<<Ew<<endl;
	} 
	bestw = Ew; 
	for(int j = n ; j > 0 ; j--){
		best[j] = E->lchild;
		E = E->parent;
	} 
	
	cout<<"最佳装载方案为:"<<endl;
	for(int j = 1 ; j <= n ; j++){
		if(best[j] == 1){
			cout<<j<<" ";
		}
	}
	cout<<endl;
	//cout<<"最佳重量为:\n"<<bestw<<endl; 
	
	return 0;
}

截图

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码
  • 截图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档