3. 上界函数
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 上界函数
template <class Type>
class Loading
{
friend Type MaxLoading(Type[], Type, int); // 友元函数
private:
void Backtrack(int i); // 回溯函数
int n; // 集装箱数
Type *w, // 集装箱重量数组
c, // 第一艘轮船的在载重量
cw, // 当前载重量
bestw, // 当前最优装载重量
r; // 剩余集装箱重量
};
template <class Type>
void Loading<Type> ::Backtrack(int i){ // 定义成员函数,搜索第i层节点
if(i>n){ // 到达叶节点
bestw=cw;
return;
}
// 搜索子树
r -= w[i];
if(cw+w[i]<=c){ // x[i]=1
cw += w[i];
Backtrack(i+1);
cw -= w[i];
}
if(cw+r>bestw) // x[i]=0
Backtrack(i+1);
r += w[i];
}
template <class Type>
Type MaxLoading(Type w[], Type c, int n){ // 定义友元函数,返回最优载重量

本文详细介绍了如何利用回溯法来解决装载问题,并重点讲解了在算法设计中至关重要的上界函数概念。通过宋老师的算法设计与分析,读者将深入理解这一方法在实际问题求解中的应用。

634

被折叠的 条评论
为什么被折叠?



