有限制地提升c ++ Astar

时间:2017-12-27 12:17:28

标签: c++ boost graph grammar a-star

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

的astar算法

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

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

1 个答案:

答案 0 :(得分:0)

简短回答

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

中讨论过

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

更长的回答:

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

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

基本想法是

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

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