2013-03-19 46 views
0

我必須通過迭代加深算法解決「高峯時間難題」。我在這裏閱讀了很多關於stackoverflow和互聯網的話題。我認爲我理解迭代加深算法。基本上你只是深入樹中並嘗試找到解決方案。高峯時間 - 迭代深化

我想我需要從這個謎題中創建一個圖或樹,但我真的不知道如何。另外,如果我有樹,那麼如何判斷某個事物是有效的還是最終的狀態呢?

有答案,節點應該是可能的移動和邊緣之間的節點,可以在一個步驟中到達。我可以想象得到這一點,但不知何故,我發現這可能是有用的或更好的,但如何解決這個問題。

請幫助我,我不是要求完整的解決方案或代碼示例,我只是需要一些簡單的問題解釋。

回答

1

有一個原因需要使用深化算法。想象一下,你爲每輛車命名A,B,C,D ......你樹的根節點是最初的棋盤狀態。現在,移動汽車A.你沿着樹中的一個節點走下去。將汽車A移回。你處於初始狀態,但你做了兩個動作來到這裏,所以你是樹下的兩個節點。重複一遍又一遍。你永遠不會達到最終狀態。

樹的根節點是初始板狀態。給定該節點,爲每個可能的有效移動添加一個子節點。因此,每個子節點將是初始樹在移動後的樣子。現在,對於每個子節點,執行同樣的操作:創建一個子節點,其中每個節點都是一個移出原始子節點的節點。

最終,你將遇到一個解決方案。發生這種情況時,您將從根節點打印到解決方案子節點並退出。該算法可確保您找到移動次數最少的解決方案。

+0

謝謝,所以節點實際上代表整個董事會?這對我來說很有意義。然而,這非常耗費內存,還有其他方法嗎? – Jan 2013-03-19 16:43:54

+0

有兩種方法。方法1:每個節點都是一個完整的板子(當然,你會把它變成一個對象)。方法2:每個節點都是一個動作。要查看節點上電路板的狀態,您必須從初始電路板開始,然後通過樹來到您正在檢查的節點,因爲您所有的都是移動。一個需要更多的記憶。一個需要更多的處理時間。你想要做什麼? – kainaw 2013-03-19 16:47:20

+0

我想我會帶更多的記憶。移動方法似乎有點複雜 – Jan 2013-03-19 18:27:04