OGDF を使用して、GML ファイルからロードされたグラフに対して何らかの処理を実行しようとしています。これらのグラフは、ノード ラベルが維持されている場合にのみ意味があります。残念ながら、OGDF ではラベルなどのノード属性を保持するのは簡単ではありません。それらは と呼ばれる別のデータ構造で保持されるからGraphAttributes
です。私の問題は、GraphAttributes
ノード ラベルをノードインデックスに関連付けることです。これは、使用する必要がある一部のグラフ変換によって維持されません。
グラフで実行する必要がある変換の 1 つは、接続された各サブグラフを 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
コピーされた接続されたサブグラフのノードに正しいラベルを取得できるように、オブジェクトに対して同じ変換を実行する方法はありますか?