2009-11-27 22 views
3

即時通訊也不太清楚如何實現這...水壺問題虎膽龍威3成圖形

我需要根據從電影虎膽龍威3水罐問題創造一個加權有向圖(http://www.wikihow.com/Solve-the-Water-Jug-Riddle-from-Die-Hard-3 )。

我需要爲所有可能的移動(填充,空,傾倒)創建節點。在我需要找到解決方案的最短路徑之後。但是我在創建這個圖時遇到了麻煩。我正在使用我自己創建的鏈接列表/節點。

任何幫助算法來創建這個圖將是很好的。謝謝。

ex)給定3加侖,5加侖。在5加侖的水罐中加入4加侖。我需要創建一個所有可能的動作的圖表,以達到4加侖。每個不同的加侖代表不同的節點。

感恩節快樂=)

回答

3

推測每個節點保存兩個正整數 - 加侖的在3加侖壺號,5加侖壺加侖數。弧形,也稱爲邊緣(指示),是「移動」(並且用弧線表示的動作標記) - 顯然,您還可以使用無名的水龍頭,因爲您可以隨時填充任一水壺;你也可以隨時清空一個水罐(所以你也有一個水槽);等等(其他動作都涉及將水從一加侖轉移到另一加侖,直到第一個是空的或第二個是滿的)。毫無疑問,最好避免產生合法但無用的弧線(「移動」),例如「填充」已滿的水罐,或撤銷剛剛做出的移動(例如清空剛剛從水龍頭中取出的水罐),儘管添加這樣的弧線只會意味着更多的工作,而不是一個不正確的解決方案。

所以從(0,0)開始 - 兩個水壺都已滿,就像您在開始時一樣。顯然,從這裏的兩個弧分別將你帶到(3,0)和(0,5)(從水龍頭中填充一個或另一個),依此類推。希望這可以幫助!

+0

謝謝,但我需要弄清楚某種alg。這給了我所有可能的壺狀態組合。第一步是(3,0)和(0,5)。但是有沒有一個ALG給我所有的人? – bat 2009-11-27 05:30:35

+0

當然,只要做出所有可能的生成新節點的動作(保留一組已經生成的元組,即所有現有的節點)。當您完成所有移動並生成新節點時,節點將耗盡。當所有現有節點耗盡時,就完成了(容易跟蹤另一組節點)。如果您可以閱讀Python(通常稱爲「可執行僞代碼」),我可以在10分鐘內向您顯示所有詳細信息,但是我的描述必定足以讓您以您選擇的任何僞代碼抄錄(或根據需要自己做功課,對吧?! - )。 – 2009-11-27 06:28:19

2

在每個步驟中必須6個不同的選項

1.A =全
2.B =全
3.A->乙
4.B->甲
5.A = 0
6.B = 0

而你在這裏。 將狀態置於查找表中並檢查解決方案是否會重複。這也是停止條件。

大小的查找表的是A * B,並計算散列只是A *體積(B)+ B

在表[A *體積(B)+ B]從你來自巫位置保存。 對錶格元素進行初始化-1(我認爲第一個索引爲0的語言)