1

我正在尝试使用 OGDF 对从 GML 文件加载的图形执行一些处理。这些图仅在维护节点标签时才有意义。不幸的是,OGDF 无法轻松保留节点属性(如标签),因为它们保存在一个名为GraphAttributes. 我的问题是将GraphAttributes节点标签与节点索引相关联,这不是由我需要使用的一些图形转换维护的。

我需要对 Graphs 执行的转换之一是在 GML 文件中拆分每个连接的子图。加载图形及其节点标签很简单:

ogdf::Graph graph;
ogdf::GraphAttributes attributes(graph, ogdf::GraphAttributes::nodeLabel);
ogdf::GraphIO::readGML(attributes, graph, FILENAME);

// this gives the correct label of the first node in the graph
attributes.label(graph.firstNode());

同样,OGDF 提供CCsInfo类来查找图的连接子图。因为,我想独立处理这些子图,所以我使用该GraphCopy::initByCC方法来创建单独的Graph实例。

ogdf::CCsInfo info(graph);
ogdf::GraphCopy copy(graph);
ogdf::EdgeArray< ogdf::edge > edgeArray(graph);
// where i (int) is the number of the connected subgraph to copy
copy.initByCC(info, i, edgeArray);

// this now gives the wrong label for the first node in copy
attributes.label(copy.firstNode());

这有效,并且copy仅包含连接子图的节点和边。但是,副本中节点的索引与原始图中节点的索引不同。这意味着标签到attributes对象中节点的映射不适用于 中的节点copy

有没有办法对attributes对象执行相同的转换,以便我可以获得复制的连接子图中节点的正确标签?

4

1 回答 1

1

事实证明这并不像我想象的那么难。我缺少的关键部分是您可以使用该GraphCopy::original方法从原始图中获取具有索引的节点,然后使用该节点获取标签。

// get the correct label for the first node of the GraphCopy object copy
attributes.label(copy.original(copy.firstNode()));
于 2016-06-09T21:28:12.847 回答