Boost 具有嵌套图结构的AStar

Boost 具有嵌套图结构的AStar,boost,graph-theory,a-star,Boost,Graph Theory,A Star,我用boost a*实现了一个图(当前有向无环图)。图形本身在空间上有些不一致,因为图形由多个分区组成,每个分区内的坐标在空间上有意义,但分区之间的坐标不能准确反映空间距离。因此,在分区内,欧几里德距离可以作为距离度量,但在考虑两个单独分区中的节点时,欧几里德距离不能。这也是不可能纠正的,因为该图针对的是没有刚性坐标结构的MUD 一种解决方案是将a->b的路径建模为一系列通过区域的运动,在每个区域内找到最快的路径,然后将这些路径合并为最终路径 因此,我的问题是:有没有一种方法可以拥有这种“嵌套图

我用boost a*实现了一个图(当前有向无环图)。图形本身在空间上有些不一致,因为图形由多个分区组成,每个分区内的坐标在空间上有意义,但分区之间的坐标不能准确反映空间距离。因此,在分区内,欧几里德距离可以作为距离度量,但在考虑两个单独分区中的节点时,欧几里德距离不能。这也是不可能纠正的,因为该图针对的是没有刚性坐标结构的MUD

一种解决方案是将a->b的路径建模为一系列通过区域的运动,在每个区域内找到最快的路径,然后将这些路径合并为最终路径


因此,我的问题是:有没有一种方法可以拥有这种“嵌套图”结构,或者我必须手动将问题分块处理?

您可能可以了解一下Boost.graph库中的概念。这里的实际示例使用boost:

我想你的出发点应该是创建一个超级图;然后为每个分区创建一个子图,用顶点填充它们。最困难的部分可能是添加此类图的所有边


至于图形的距离图,您不必将其存储在图形上;它可以是一个外部属性映射,甚至可以是一个动态计算距离的函子。

您知道这是通过全局图处理距离度量,还是从子图的坐标处理距离度量?从文档中看不明显。我的意思是,子图A的坐标在x=(-200200),y=(-200200)的范围内,但是子区域C可能有相同的坐标。没有单一的巨型地图。那么从A区->C区开始,目标是以A和C中的坐标计算的,还是先解出子图?首先,BGL对你的坐标一无所知。A*仅考虑边缘及其权重方面的原因。因此,您需要回答的第一个问题是:如何定义簇内的边?第二,如何定义簇之间的边(可能的路径)。最后,您选择了如何通知BGL与边关联的权重。BGL为您提供了大量的选项,可以选择如何将边权重传递给特定的算法。可以将其作为多个边,可以传递关联容器(如贴图),也可以将边定义为函子。