0
点赞
收藏
分享

微信扫一扫

装载问题(回溯)

dsysama 2022-05-03 阅读 67
#include<iostream>
#include<algorithm>
#define NUM 100
using namespace std;

int n; // 集装箱数量
int c; // 轮船的载重量 
int w[NUM]; // 集装箱的重量数组 
int x[NUM]; // 当前搜索的解向量 
int r;  // 剩余集装箱的重量
int cw; // 当前轮船的载重量
int bestw; // 当前最优载重量
int bestx[NUM]; // 当前最优解 

void traceback(int t){
	
	// 到达叶子结点 
	if(t > n){
		
		if(cw > bestw){
			bestw = cw;
			for(int i=1; i<=n; i++)
				bestx[i] = x[i];
		}
			
		return;
	}
	
	r -= w[t];
	if(cw + w[t] <= c){
		cw += w[t];
		x[t] = 1;
		traceback(t+1);
		cw -= w[t];
	}
	
	if(cw + r > bestw){
		x[t] = 0;
		traceback(t+1);
	}
	
	r += w[t];
} 

int main(){
	
	for(int i=1; i<=n; i++){
		scanf("%d", &w[i]);
		r += w[i];
	}
	
}
举报

相关推荐

0 条评论