這個問題是看演算法精華版時候看見的,人家的演算法看了很頭大,自己寫一遍後覺得清楚多了
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.windows.forms;
/* * 分油演算法:乙個桶中有
12斤油,要求倒出
6斤,可現在另外只有兩個桶,分別可裝8斤與
5斤,請問應如何來倒?
* 補充:這裡的
12,6,8,5
都是變數,應該可以自己設定,輸出是每一次分油的步驟。
* * bfs
廣度優先搜尋,把探索到的狀態放在臨時表裡,看是否探索又回到了原來的位置。
* *
* */
namespace
zbosorting.test.csdn
private
list
bottlelist = new
list
();private
list
bottletotalstatus = new
list
();private
bottle bottle1 = new
bottle () ;
private
bottle bottle2 = new
bottle () ;
private
bottle bottle3 = new
bottle () ;
public separateoil() ;
bottlelist.addrange(bottlearray);
this .targetoil = 6;
bottletotalstatus.add(new
status () ); }
public
void run()
} }
fromstatus.insearch = false ;
searchstatuslist = bottletotalstatus.findall(status => status.insearch == true ); }
} private
void resetbottles(status fromstatus)
private
void dumpoil(bottle frombottle, bottle tobottle, status fromstatus) ;
if (
bottletotalstatus.find(
s => (s.oilin12 == status.oilin12 && s.oilin5 == status.oilin5 && s.oilin8 == status.oilin8)) ==
null )
}else
} }
private
list
getpossibleto()
return possibleto; }
private
list
getpossiblefrom()
return possiblefrom; }
internal
class
bottle
public
int currentoil }
internal
class
status
public
int oilin8
public
int oilin5
public
status fromstatus
public
bool insearch = false ; }
} }
用寬度優先搜尋(BFS)解決分油問題
選了李翠華老師的計算智慧型課程,第一次作業是解決乙個小孩分油問題,把實驗報告和 上傳,留底。1.問題描述 編寫乙個程式,解決下列問題 小孩分油問題 兩個小孩去打油,一人帶了乙個一斤的空瓶,另乙個帶了乙個七兩 乙個三兩的空瓶。原計畫各打一斤油,可是由於所帶的錢不夠,只好兩人合打了一斤油,在回家的路上,...
小孩分油問題
1.問題描述 兩個小孩去打油,一人帶了乙個一斤的空瓶,另乙個帶了乙個七兩 乙個三兩的空瓶。原計畫各打一斤油,可是由於所帶的錢不夠,只好兩人合打了一斤油,在回家的路上,兩人想平分這一斤油,可是又沒有其它工具,試僅用三個瓶子 一斤 七兩 三兩 精確地分成兩個半斤油來。2.演算法設計 假設狀態a x1,x...
最優程式問題(BFS)
輸入兩個整數n1,n2.用 最少的四則運算從n1得到n2.例如 輸入2,5,則 2 2 1,1 2 3,3 2 5.運算結果為 div,add,add.好吧我偷懶把題目簡化了。因為運算步驟可能無限長,本題的解答樹是無限大的,此題不能用回溯來解。本題要求最短過程,利用寬度優先遍歷解答樹。int n1,...