【问题标题】:Using Boost Graph Library (BGL) with existing graph data structure将 Boost Graph Library (BGL) 与现有的图数据结构一起使用
【发布时间】:2017-06-10 08:18:05
【问题描述】:

我有一个现有的图,由我自己的顶点和边类构建,如下所示:

struct Graph;

struct OutPort {};

struct InPort { 
  OutPort* connectedOutput; 
};

struct Node { 
  Graph* graph;
  std::list<InPort> inputs;
  std::list<OutPort> outputs;
};

struct Graph {
  std::list<Node> nodes;
}

也就是说,图由节点组成,节点有 0..* 输入和输出端口。一个输入端口可以连接到任何节点(包括它自己的)的 0..1 个输出端口。

我想将 BGL 算法应用于此图,但在使用保留我现有的数据结构或在它们与 BGL 数据结构之间提供合适的映射时无法弄清楚如何做到这一点。

如果有一个介绍性的例子,我将不胜感激。

【问题讨论】:

    标签: c++ boost boost-graph


    【解决方案1】:

    制作示例有点复杂。但是,您需要为您选择的图形概念建模。

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

    我发现很难从您的模型中看到边缘是如何表示的(端口很可能断开连接,或者 OutPort 可能会引用 Node 等)。我觉得您可能想要为 AdjacencyGraph 建模。所需操作列在链接页面上。

    【讨论】:

    • 谢谢。我的示例确实是简单的,但端口始终由单个节点拥有。 OutPorts 不引用任何内容,InPorts 引用 0..1 OutPort。
    • 那么,您将如何识别顶点?我估计只有一个入口?在这种情况下,您基本上拥有自己的 ad-hoc adjacency_list。 Boost 的通用模型之一是 VertexAndEdgeListGraph、MutablePropertyGraph、CopyConstructible、Assignable 和 Serializable。你可能已经受够了其中的一部分:)
    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2016-10-16
    相关资源
    最近更新 更多