我有一个图,该图实现为连接任意节点的边列表,数据类型定义如下。
type edge = int * int;;
type graph = edge list;;
我将如何执行纯功能深度优先搜索同时避免陷入循环?我不太确定如何在保持纯功能的同时跟踪所有访问过的节点。答案可能是一些微不足道的东西,出于某种原因我在概念上无法理解。
最佳答案
搜索功能有一个跟踪访问节点的参数。在 FP 中,其中一个见解是您可以不断地更深入地调用(使用尾调用)。因此,您可以在所有调用中传递参数,同时添加新节点。
另一个参数可能是您计划稍后访问的节点。对于 DFS,这将像堆栈一样工作。
关于algorithm - 使用纯功能深度优先搜索时如何防止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33361978/