有限制地提升c ++ Astar

问题描述 投票:0回答:1

我正在使用boost http://www.boost.org/doc/libs/1_66_0/libs/graph/doc/astar_search.html的astar算法

我想整合从起始节点到目标节点的路径长度的长度条件。更具体地说,我试图找到一个精确长度为11位的数字链。一个想法可能是融入增强A * - 实现的访客模式。但到目前为止,我找不到好的解决方案。

更一般的我正在寻找一种方法将语法检查集成到A *算法中。在我的具体例子中,语法可以用常规模式表示,如^ [1-9] \ d {10} $每个节点代表一个字符(这里是一个数字)。任何建议表示赞赏。

c++ boost graph grammar a-star
1个回答
0
投票

简短的回答

您可能无法轻松地将其集成到A *中,但您的问题已在this question中讨论过

编辑:似乎已经在Boost中实现了shortest path algorithm with resource constraints,这与你的问题有关,正如他指出的那样。

更长的回答:

我认为不可能直接使用Dijkstra算法的变体(包括A *)来限制路径长度,因为对于您到达的每个节点,您需要跟踪每个不同路径长度的最短路径(在在那里领先的边数的条款。

您在上一段中描述的是语言约束最短路径问题的简化形式,首先由Barrett et al.调查本文描述了一种算法,该算法解决了正则表达式在多项式时间内对边缘标签具有约束的最短路径的一般问题。但是,您需要一些关于形式语言和常规自动机的知识才能理解它。

基本的想法是

  • 从输入图G中构造一个非确定性自动机M(G),对源s和目标t进行特殊处理
  • 构造用于描述允许路径的常规语言R的非确定性自动机M(R)然后
  • 构造这两个自动机之间的交集,它完全接受从s到t的路径,这些路径满足常规语言给出的约束

在这个自动机上,你可以运行一个正常的最短路径算法来找到你选择最短路径的几个候选者。

© www.soinside.com 2019 - 2024. All rights reserved.