Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输出所有可能解的*(星型)算法_Java_Algorithm_A Star - Fatal编程技术网

Java 输出所有可能解的*(星型)算法

Java 输出所有可能解的*(星型)算法,java,algorithm,a-star,Java,Algorithm,A Star,已知A星算法是完整的。然而,我发现搜索web的所有实现似乎只返回第一个(最佳)解决方案 例如,此实现: 由于算法总是以最小f值扩展节点,并且当第一个节点是解决方案时,实现似乎停止,那么如何调整上述代码,以便在不考虑重复操作的情况下输出通向目标的所有(或前n条)路径(即反复包含相同操作的路径)它是完整的,这意味着如果存在一个解决方案,它将找到一个解决方案,但该算法只返回一条路径。广度优先搜索将查找两个节点之间的所有非循环路径,但是: 更新-这里是k-最短路径算法,它将返回n个(或在本例中为k个)

已知A星算法是完整的。然而,我发现搜索web的所有实现似乎只返回第一个(最佳)解决方案

例如,此实现:


由于算法总是以最小f值扩展节点,并且当第一个节点是解决方案时,实现似乎停止,那么如何调整上述代码,以便在不考虑重复操作的情况下输出通向目标的所有(或前n条)路径(即反复包含相同操作的路径)

它是完整的,这意味着如果存在一个解决方案,它将找到一个解决方案,但该算法只返回一条路径。广度优先搜索将查找两个节点之间的所有非循环路径,但是:


更新-这里是k-最短路径算法,它将返回n个(或在本例中为k个)的列表最短路径按从短到长的顺序排列。

对于所有路径,使用呼吸优先搜索可能更有意义。或者,如果您想找到前n条最短路径,您可以尝试。

只要在找到少于
n
的解后不要停止,您就会得到
n
最佳解。这当然会不起作用?@flup:为什么?搜索空间是一棵树,a*-算法保证找到一个最优解,如果你从树上切下这个解,a*-算法将为缩减后的树找到一个最优解。你不需要再次开始搜索,因为树的每个节点的计算都没有改变。@mri就而言,
的值来自于封闭集合中的
箭头,指向到达它们的最佳方式将是毫无意义的。整个内部数据结构与您刚刚找到的最佳解决方案相协调。我真的不明白您如何继续或跳过一个解决方案。@flup:正如您在图形示例(wikipedia)中看到的那样当一条搜索路径通向一个盲点(或另一条路径)时,下一条有希望的路径(就成本而言)路径将被搜索。如果你通过剪掉叶子将已经找到的最佳解决方案声明为“盲端”,就好像该解决方案从未存在过一样。在大多数情况下,这比“搜索”的性能差得多。a*更快,但它不能做他想做的事情。如果你让它做他想做的事情,它将变得更慢,因为它不再是外观搜索单一路径,但所有路径。搜索所有路径正是广度优先搜索所做的。我不知道你对a*所有可能修改行为的智慧来自何方。但我对此表示怀疑。海报问“如何修改上述代码,以便输出所有(或前n条)通向目标的路径。”你认为A*是怎么做到的?这两件事都做不到。