遍歷各元素,若cw+w[t]<=c(即船可以裝下),則進入左子樹,w[t]標記為1,再進行遞迴,若cw+r>bestw(即當前節點的右子樹包含最優解的可能),則進入右子樹,否則,則不遍歷右子樹。
public
class
loading
//計算最優載重量
backtrack(1
);return bestw;
}//核心演算法
public
static
void
backtrack
(int t)
bestw = cw;
}return;}
r -= w[t];if
(cw + w[t]
<= c)
if(cw + r>bestw)
r += w[t]
;//恢復現場}/*
* 如果當前節點的右子樹不可能包含比當前最優解更好的解時,就不移動到右子樹上!
設bestw為當前最優解,z為解空間樹的第i 層的乙個節點
為剩餘貨箱的重量;當cw+r<=bestw時,沒有必要去搜尋z 的右子樹:
當前載重量cw+剩餘貨櫃的重量r>當前最優載重量bestw
*/public
static
void
main
(string[
] args)
; int c1 =
100;
int c2 =
100;
int n = ww.length -1;
maxloading
(ww,c1)
; int weight2 =0;
//儲存第二艘船可能要裝的重量
for(int i=
1;i<=n;i++)if
(weight2>c2)
else
}//第二艘船的裝載情況
for(int i =
1;i<=n;i++)}
}}}
PTA 資料結構與演算法 回溯
1.在4皇后問題中,x1,x2,x3,x4 對應4個皇后位置的列下標。在回溯剪枝過程中,狀態 1,4,2,會在 2,4,1,之前被檢查,並且它們對應的分支都沒有解。tf 2.西洋棋四皇后問題僅有 2 個不同的解。tf 1.給定收費公路重建問題的距離集d 首先可以確定的是 x1 0 和 x6 8。下列...
資料結構 回溯法與樹的遍歷
回溯法求冪集 深度優先遍歷解空間 include include using namespace std void getpowerset const vector srcvec,vector dstvec,int i else int main 回溯法求解n皇后問題 include include...
資料結構與演算法練習 回溯 遞迴
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。i個字母的排列組合和i 1個字母的排列組合問題...