#include
using
namespace
std;
class farm
;void farm::backtrack(int i)
if(cw+w[i]<=c)
if(bound(i+1)>bestv)
}bool farm::bound(int i)
if(b>bestv)//滿足上界函式,則進入右子樹
return
false;
}void compute(int w,int v,int c,int n)
delete f.x;
}int main()
;//int v=;
int n,c;
cout
<<"請輸入總雞數 n: ";
cin>>n;
cout
<<"請輸入總載重量 c: ";
cin>>c;
int *w=new
int[n+1];
int *v=new
int[n+1];
cout
<<"請輸入雞的重量:";
for(int i=1;i1;i++)
cout
<<"請輸入雞的產蛋量";
for(int i=1;i1;i++)
compute(w,v,c,n);
return
0;}
注意回溯法的特徵雞的選擇問題中,約束函式為:所選雞的總重量不超過卡車的最大載重量 ;上界函式為bound(int i) :若將已經選擇的雞和剩下的雞的所有產蛋量相加還小於當前最有產蛋量,則直接刪除右子樹。 回溯法,回溯法解裝載問題
利用回溯法解問題時一般按以下三步驟 1 定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度優先策略搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋 二 回溯法應用 裝載問題 一批貨櫃共n個要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi且w1 w2 wn c1 c2 試確定乙個...
回溯法 堡壘問題
描述 城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都會把對方打掉。問對於給定的一種狀態,最多能夠修建幾個堡壘。輸入 每...
回溯法 迷宮問題
1.首先我們需要自定義乙個迷宮 左上角為入口,右下角為出口,0為路,1為牆 用二維陣列儲存 2.我們在走迷宮之前,首先要確立乙個走的順序,即貪心準則,我們首先試探的方向應該是下,然後是右,上,左 為了確保每乙個格仔都有上下左右,我們需要給我們的迷宮加上一圈牆8 8,變成10 10 3.當我們在乙個格...