0

ノードの自己ループのないグラフである単純なグラフを作成したいと思います。オンラインで入手可能なチュートリアルでは、SimpleGraph インターフェイスを使用する必要があると言われていますが、どの jar ファイルにも見つからないため機能しません。セルフループを無効にするためにできることはありますか、それとも単に元にすべきでしょうか。マウスキーを放すたびに、セルフループが追加されているかどうかを確認し、非常に非効率的なエッジを削除します。

4

2 に答える 2

1

上記のポイントで述べたように。3 コードは次のようになります。

public class UndirectedSimpleGraph<V,E> extends UndirectedSparseGraph<V,E> {

public UndirectedSimpleGraph(){
    super();
}

public boolean addEdge(E edge, Pair<? extends V> endpoints, EdgeType edgeType){
    Pair<V> new_endpoints = getValidatedEndpoints(edge, endpoints);
    if (new_endpoints == null)
        return false;

    V v1 = new_endpoints.getFirst();
    V v2 = new_endpoints.getSecond();

    if(v1.equals(v2))
        return false;
    else
        return super.addEdge(edge,endpoints,edgeType);
}
于 2013-04-11T18:45:05.643 に答える
0

何のチュートリアルかわかりませんが、JUNG には「SimpleGraph」インターフェースがありません。

ただし、次のメカニズムのいずれかを使用して、これを自分で簡単に実現できます。

  1. あなたが提案したように:追加されたエッジが自己ループであることを特定し、それを削除します
  2. 宛先頂点が判明したら、ソース != 宛先の場合にのみ addEdge() を呼び出します
  3. addEdge() をオーバーライドし、自己ループを拒否する、好みのグラフ タイプのサブクラスを作成します。

これが非効率的だとあなたが考える理由がわかりません。これらのチェックはすべて O(1) です。

于 2013-04-10T17:22:45.723 に答える