一 回溯法
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
二 问题
有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且,装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘轮船。如果有,找出一种装载方案。
首先将第一艘船尽可能装满,再将剩余集装箱装到第二艘船,这样可以得到一种装载方案。
三 代码
#include "LoadShipsBackTrack.h"
using namespace std;
#include <iostream>;
// 集装箱数
int n = 3;
// 当前解:0表示不装入第一艘船,1表示装入第一艘船。
int x[4] = {0,0,0,0};
// 当前最优解
int bestx[4];
// 集装箱重量数组(集装箱编号从1开始)
int w[4] = {0,10,40,40};
// 第一艘轮船的载重量
int c1 = 50;
// 第二艘轮船的载重量
int c2 = 50;
// 当前载重量
int cw;
// 当前