我一直在做一个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