10

我对 C++ 模板生疏了,我正在使用 boost 图形库(一个致命的组合)。我在网上搜索过,找不到任何关于如何采用自定义图形结构并将其足够适合 BGL(增强图形库)的直接说明,我可以使用增强图形遍历算法。有足够熟悉图书馆的人来帮助我吗?

编辑:所以,我遇到的主要问题是在哪里可以找到将任意图映射到 BGL 图的总要求的来源。我对模板真的很陌生,所以我很难阅读 BGL 的规范/示例。也许我应该寻找模板的一般来源?

4

2 回答 2

6

我的建议是完全放弃使用 BGL,除非您已经在其上编写了大量代码。我最近正在测试它以供将来在一个大型图形分析项目中使用,我发现它几乎无法使用,因为 API 过于复杂且设计不佳。

BGL 中没有简单的任务,只有复杂的任务,而且由于 BGL 具有过于复杂的模板层次结构,我一直在与编译器作斗争。几乎没有有用的文档(至少在真正需要的地方没有)并且没有足够的示例只会加剧问题。这不是写代码的方法。

我建议切换到LEMON。它是稳定的,用 C++ 编写,易于理解和代码,提供了几种特殊的图形形式来支持不同的使用需求,它同时支持 BFS 和 DFS 搜索/访问器功能。它还具有自己的节点/边属性映射等价物,因此您应该能够将自己的图形结构和其他数据拟合到它上面。

试试柠檬;它尝起来好多了,而且会减少溃疡。;-)

于 2010-06-15T21:14:20.363 回答
5

据我了解,这种方法是专门boost::graph_traits针对您的图形类型的结构。这为 BGL 配置了它需要了解的有关您的图形的各种重要属性。然后,您为您的图形的专用类型专门化全局模板函数,graph_traits以实现可能适用于您的特定类型图形的任何增强图形接口。

BGL 文档中有一个示例:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/leda_conversion.html

那里有几个不同接口的链接,这些链接表明如果您想支持该接口,您需要为您的图形专门化哪些全局模板函数。完整的接口列表在这里:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/graph_concepts.html

于 2010-06-14T18:20:08.477 回答