📄 bbloadb.cpp
字号:
// FIFO branch-and-bound loading// improved version, finds best value only#include<iostream.h>#include "lqueue.h"template<class T>T MaxLoading(T w[], T c, int n){// Return value of best loading. // Use FIFO branch and bound. // initialize for level 1 start LinkedQueue<T> Q; // live-node queue Q.Add(-1); // end-of-level marker int i = 1; // level of E-node T Ew = 0, // weight of E-node bestw = 0, // best weight so far r = 0; // remaining weight at E-node for (int j = 2; j <= n; j++) r += w[i]; // search subset space tree while (true) { // check left child of E-node T wt = Ew + w[i]; // weight of left child if (wt <= c) { // feasible left child if (wt > bestw) bestw = wt; // add to queue unless leaf if (i < n) Q.Add(wt);} // check right child if (Ew + r > bestw && i < n) Q.Add(Ew); // may have a better leaf Q.Delete(Ew); // get next E-node if (Ew == -1) { // end of level if (Q.IsEmpty()) return bestw; Q.Add(-1); // end-of-level marker Q.Delete(Ew); // get next E-node i++; // level of E-node r -= w[i];} // remaining weight at E-node }}void main(void){ int w[6] = {0, 2, 2, 6, 5, 5}; int n = 5; int c = 16; cout << "Max loading is " << MaxLoading(w,c,n) << endl;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -