2012-05-24 25 views
0

假設我有一個搜索樹,並且正在嘗試查找目標的所有解決方案。如果我不修剪樹使得孩子仍然可以生成它的父節點,那麼搜索空間就會變得非常大。那麼有人可以給我看一個謂詞來做這件事,或者向我解釋如何做到這一點,因爲我對Prolog很陌生。如何在prolog中進行修剪以防止子節點再次生成其父節點

+0

搜索'Prolog cut'即! – CapelliC

+0

@chac:請注意,問題要求「找到目標的所有解決方案」。此外,切割不會阻止無限循環。 – hardmath

+0

@hardmath:是的,我明白了,但我不清楚OP是否已經知道! – CapelliC

回答

2

最簡單的方法可能是爲您的「搜索」謂詞添加一個額外的參數,它跟蹤已經訪問過的節點(父節點,子節點等)以及禁止訪問前一節點的子句。

某些術語值得清理。樹是沒有循環(循環)的圖形,所以在「搜索樹」中,實際上沒有可能重複訪問節點兩次。

也許你正在爲目標找到某種類型的路徑,解決方案就是可能的路徑。找到「所有目標解決方案」的規定要求在排除那些不止一次重新訪問節點的路徑時處於一種緊張狀態。但是,我們假設允許不重訪節點的限制。

如果您提供了更多關於如何對搜索謂詞進行編碼的方式,我將能夠具體說明如何添加額外的「已訪問列表」參數。

相關問題