我一直在做一個OCaml的教程(不要問我爲什麼,我只是決定擴大我的語言知識,我猜),我已經到了我所處的位置與圖表一起工作。該教程教會了我如何在圖形上進行廣度優先搜索,這可以很好地實現。然而,我一直在努力尋找深度優先搜索的算法,這是本教程的其中一個方面,「我們建議您使用深度優先方法來嘗試,但我們不會告訴您如何做吧。「OCAML深度優先搜索
我試圖執行它像這樣:let rec dfs graph start end
。也就是說,我一直試圖在邊界列表(),起始節點(start
)和結束節點(end
)中進行。
我用邊的列表中創建我的圖...
let edges = [
("a", "b"); ("a", "c");
("a", "d"); ("b", "e");
("c", "f"); ("d", "e");
("e", "f"); ("e", "g")
];;
不過,我完全失去了到哪裏何去何從。有關如何讓我走的任何建議?謝謝。
通常的一句話總結是,深度優先搜索與廣度優先搜索相同,只不過您用堆棧替換未訪問節點的隊列。您可以嘗試以這種方式修改您的廣度優先搜索實現。 –
用於列出節點後繼的函數可能會讓您更容易。 – PatJ