4

カスタム エッジを定義したい

public class Connection extends DefaultWeightedEdge

しかし、私が使用しようとすると、super()それは可能ですか? グラフを作成するとき、EdgeFactory には何を使用すればよいですか?

new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);

これで十分でしょうか?EdgeFactoryまたは、同様に拡張する新しいクラスを作成する必要がありますか?

4

2 に答える 2

7

DefaultWeightedEdgeカスタム エッジを作成するためにサブクラス化する必要はありません。以下も機能します。現在、JGraphT のバージョン 0.9.0 を使用しています。

クラス定義:

public class Connection {
    // class implementation
    // define all constructors and methods you need
}

グラフ作成 :

SimpleWeightedGraph<Sensor, Connection> graph;
graph = new SimpleWeightedGraph<Sensor, Connection>(Connection.class);

カスタム エッジの追加と重みの設定:

Sensor v1 = // sensor instance
Sensor v2 = // another sensor instance
graph.addVertex(v1);
graph.addVertex(v2);

Connection connection = new Connection(/* ... */);
graph.addEdge(v1, v2, connection);
graph.setEdgeWeight(connection, 10.0);

JGraphT はバージョン 0.8.4 以降、これらのメソッドに依存しているため、クラスequalshashCodeメソッドを実装することも検討してください。EqualsAndHashCode の記事を参照してください。この記事では、がサブクラス化される例も示します。ConnectionDefaultWeightedEdge

于 2014-10-31T07:49:44.893 に答える
1

これは、カスタム エッジの作成に役立ちますか?

この特定の例は、JGrapht の内部ドキュメントから引用されています。コード ベース内で StoerWagnerMinimumCut アルゴリズムを検索します。

どうぞ 。

ここでの考え方は、グラフの端にいくつかの重みを与えることです。そのため、デフォルトの重みを操作する必要があります。

final WeightedGraph<Set<V>, DefaultWeightedEdge> workingGraph;
....

workingGraph =
            new SimpleWeightedGraph<Set<V>, DefaultWeightedEdge>(
                DefaultWeightedEdge.class);
list = ....
workingGraph.addVertex(list);
.... 

// ここでエッジの重みを操作しましょう

DefaultWeightedEdge eNew = workingGraph.getEdge(someSourcEdge, someTargetEdge);
        if (eNew == null) {
            eNew = workingGraph.addEdge(someSourcEdge, someTargetEdge);
            workingGraph.setEdgeWeight(eNew, graph.getEdgeWeight(e));
        } else {
            workingGraph.setEdgeWeight(
                eNew,
                workingGraph.getEdgeWeight(eNew) + graph.getEdgeWeight(e));

この例を試して、それを使用してカスタマイズされたエッジを作成していただければ幸いです。

PS :私の答えは100%正しいわけではありませんが、ドキュメントの正しい方向を示すことが目的です:-)

于 2014-07-02T06:14:08.590 に答える