algorithm - 使用纯功能深度优先搜索时如何防止循环

标签 algorithm graph ocaml depth-first-search purely-functional

我有一个图,该图实现为连接任意节点的边列表,数据类型定义如下。

type edge = int * int;;
type graph = edge list;;

我将如何执行纯功能深度优先搜索同时避免陷入循环?我不太确定如何在保持纯功能的同时跟踪所有访问过的节点。答案可能是一些微不足道的东西,出于某种原因我在概念上无法理解。

最佳答案

搜索功能有一个跟踪访问节点的参数。在 FP 中,其中一个见解是您可以不断地更深入地调用(使用尾调用)。因此,您可以在所有调用中传递参数,同时添加新节点。

另一个参数可能是您计划稍后访问的节点。对于 DFS,这将像堆栈一样工作。

关于algorithm - 使用纯功能深度优先搜索时如何防止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33361978/

相关文章:

iphone - C/C++/Obj-C 实时算法从人声输入中确定音符(不是音高)

C++图形构建问题

iphone - 如何在 iPhone 应用程序中创建折线图?

OCaml:更高种类的多态性(对模块进行抽象?)

Ocaml lwt 永无止境的循环

java - Bellman Ford 的负循环算法

c - 如何使用递归删除数组中的相邻重复项?

c++ - 在 connect 4 C++ 算法中检查获胜者

r - 如何使用ggplot绘制每行标准偏差的线

c++ - 如何使用类型级函数动态创建静态类型?