5

このグラフを実装しました:

ListenableDirectedWeightedGraph<String, MyWeightedEdge> g = 
    new ListenableDirectedWeightedGraph<String, MyWeightedEdge>(MyWeightedEdge.class); 

クラス名の意味を示すために; シンプルで聞き取りやすい有向加重グラフ。フォーマットの代わりにエッジのラベルを変更したい

return "(" + source + " : " + target + ")"; 

エッジの重みを見せたい。getEdgesWeight()メソッドなどのノード上のすべてのアクションは、エッジではなくグラフから委任されていることに気付きました。エッジの重みを表示するにはどうすればよいですか? どういうわけかグラフをエッジに渡す必要がありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

クラス MyWeightedEdge には既に次のようなメソッドが含まれていると仮定します

public void setWeight(double weight)

これが実際に当てはまる場合は、次のことを行う必要があります。

ListenableDirectedWeightedGraphから独自のサブクラスを派生させます(例: ListenableDirectedWeightedGraph )。元のクラスとの互換性を確保するために、「スーパー」に委任して、両方のコンストラクター バージョンを追加します。

質問のようにグラフを作成しますが、新しいクラスを使用します

ListenableDirectedWeightedGraph g = 
    new CustomListenableDirectedWeightedGraph(
        MyWeightedEdge.class);

メソッドsetEdgeWeightを次のようにオーバーライドします。

public void setEdgeWeight(E e, double weight) {
    super.setEdgeWeight(e, weight);
    ((MyWeightedEdge)e).setWeight(weight);
}

最後になりましたが、クラスMyWeightedEdgeのtoStringメソッドをオーバーライドして、エッジに付けるラベルを返します (おそらく、現在使用できるようになった重みが含まれます)。

これが役立つことを願っています。

于 2008-12-03T16:59:10.773 に答える