3

同じラベルでエンドポイントが異なる2つのエッジを追加するにはどうすればよいですか?

たとえば、同じラベル'label1'を持つ2つのエッジを追加します。1つは頂点v-1から頂点v-2に、もう1つは頂点v-2からv-3にあります。

コードの一部は次のようになります。

g.addEdge("label1","v-1","v-2");
g.addEdge("label1","v-2","v-3");

ただし、JUNGでは同じラベルの2つのエッジを追加することはできません。エラーが発生します:

エッジラベル1は、エンドポイント[v-1、v-2]でこのグラフにすでに存在し、エンドポイント[v-2、v-3]で追加することはできません。

同じラベルを持つ2つのエッジを追加するにはどうすればよいですか?

ありがとう。

編集:

EdgeWeightLabellerを使用して、エッジに重み値を割り当てる方法があることを読みましたが、これらの重み値は整数である必要があります。したがって、問題は解決されていないようです。

4

3 に答える 3

1

ラベルはエッジの toString() である必要はありません。それがデフォルトです。PluggableRendererContext を見て、グラフの各要素にプロパティを提供する Transformer を提供する方法を確認してください。

ユーザーデータについて説明している JUNG 2 マニュアル (wiki の) のセクションもチェックしたいと思います: http://sourceforge.net/apps/trac/jung/wiki/JUNGManual#UserData

于 2012-02-19T23:47:22.127 に答える
1

この問題が発生した場合、ラベルを文字列 (既に文字列です) にして、その値を次のようにします: "ID_OF_FIRST_VERTEX:ID_OF_SECOND_VERTEX:EDGE_VALUE"。次に、値だけを表示するために、変換を使用します。シンプルで、エッジの名前から edge_value を取得するだけです。

このサンプルでは、​​区切り文字「:」を使用しています。

VisualizationViewer vv = new VisualizationViewer(layout, dim);
//other operations
vv.getRenderContext().setEdgeLabelTransformer(new Transformer<String, String>() {
    @Override
    public String transform(String c) {
        return StringUtils.substringAfterLast(c, ":");
    }
});

もちろん、Apache Commons の StringUtils を使用する必要はありません。通常の String.subString もここで機能します。

それが役に立てば幸い。

于 2013-05-30T20:22:58.033 に答える