0

假设我有一个搜索树,我正在尝试找到一个目标的所有解决方案。如果我不修剪树以便仍然允许子节点生成它的父节点,则搜索空间会变得非常大。所以有人可以向我展示一个这样做的谓词,或者向我解释它是如何完成的,因为我对 Prolog 很陌生。

4

1 回答 1

2

最简单的方法可能是在“搜索”谓词中添加一个额外的参数,以跟踪已经访问过的节点(父、子等),以及一个禁止访问前一个节点的子句。

一些术语值得澄清。树是没有循环(循环)的图,因此在“搜索树”中,您实际上没有重新访问节点两次的潜力。

可能您正在寻找某种通向目标的路径,而解决方案就是可能的路径。寻找“目标的所有解决方案”的既定要求与排除那些多次重访节点的路径存在一定的紧张关系。但是,让我们假设允许不重新访问节点的限制。

如果您在如何编码搜索谓词方面提供了更多信息,我将能够具体说明如何添加额外的“已访问列表”参数。

于 2012-05-24T16:00:36.427 回答