为什么BGL A *需要隐式图来建模VertexListGraph?

时间:2011-12-29 00:14:06

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

我之前的BGL Interior properties for implicit graph

更具体的后续问题

Boost BGL有一个版本的A *算法,它可以用于隐式图形,即astar_search_no_init()函数。隐式图可以建模为IncidenceGraphs。 documentation of A*说“请注意,astar_search_no_init()必须用于隐式图形;基本的astar_search()函数需要一个模拟顶点列表图形概念的图形。两个版本还需要图形类型来模拟关联图形概念”。

这是不是意味着图表必须为Vertex List Graph概念建模?如果是这种情况,我是否遗漏了一些东西,因为我无法找到使用IncidenceGraphs的函数astar_search_no_init()的任何版本?有两个版本的astar_search_no_init()可用,它们似乎都适用于VertexListGraphs。我正在使用Boost 1.48而A *位于astar_search.hpp文件中。

我不知道如何要求隐式图形首先对顶点列表图进行建模是有意义的。该文档对我来说非常混乱和误导。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

图形概念本身是有序的;这是一个很好的图形概念图;)

Boost graph concepts

如您所见,Incidence Graph所需的astar_search_no_init()概念与Vertex List Graph概念无关。即每个概念都可以独立建模。因此,图表仅对第一个概念进行建模就足够了。

请注意,确定只为[{1}}建模Vertex List Graph,即使它似乎有效。 astar_search_no_init()概念不是Vertex List Graph的特例。 可以模拟Incidence Graph;这是Incidence Graph`的一个特例

答案 1 :(得分:2)

2009年1月27日在r50803中添加了对隐式图表的支持,以修复Bug #829。该修复不依赖num_vertices或利用VertexListGraph概念建模的图形类型的任何其他要求。

因此,即使模板类型参数名为VertexListGraph,它也应该只使用仅模拟IncidenceGraph概念的图形类型。