1

A<->BJGraphT 0.8.3 で単純な無向ラベルなし (エッジはラベルなし) グラフを作成したい:

import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

class A {
    public static void main(String[] args) {
        SimpleGraph<String, String> sg =
            new SimpleGraph<String, String>(String.class);
        sg.addVertex("A");
        sg.addVertex("B");
        sg.addEdge("A", "B");
        System.out.println("edges of A: " + sg.edgesOf("A"));
        System.out.println("edges of B: " + sg.edgesOf("B"));
    }
}

私はこの出力を得る:

$ java -cp 'jgrapht-jdk1.6.jar:.' A
edges of A: []
edges of B: []

頂点AB空のエッジのセットはなぜですか? また、forのクラスパラメータは何SimpleGraphですか? エッジの種類のようですが、ここのエッジにはラベルが付いていないので、問題ないでしょうか? すべてのグラフ クラスは、エッジのクラス ( edgeClass) をパラメーターとして取るようです。ドキュメントのどこに記載されているかわかりませんedgeClass


addEdgeエッジにラベルを付けると(行を に変更するとsg.addEdge("A", "B", "an_edge");)、機能することがわかりました...しかし、エッジにラベルを付けたくありません...

$ java -cp 'jgrapht-jdk1.6.jar:.' A
edges of A: [an_edge]
edges of B: [an_edge]
4

1 に答える 1

2

エッジにラベルを付ける必要はありません。あなたのアプローチの問題は、グラフに String をエッジタイプとして使用するように指示することです。適切な標準。物事を行う方法は次のとおりです。

    SimpleGraph<String, DefaultEdge> sg = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);
    sg.addVertex("A");
    sg.addVertex("B");
    sg.addVertex("C");
    sg.addEdge("A", "B");
    sg.addEdge("B", "C");
    System.out.println("graph: " + sg.toString());
    System.out.println("edges of A: " + sg.edgesOf("A"));
    System.out.println("edges of B: " + sg.edgesOf("B"));

これにより、次の出力が得られます。

graph: ([A, B, C], [{A,B}, {B,C}])
edges of A: [(A : B)]
edges of B: [(A : B), (B : C)]

したがって、問題を解決するには、コードに示されているように、エッジ クラスを DefaultEdge に切り替える必要があります。

于 2013-04-26T09:10:52.943 に答える