1

次を使用して作成された有向グラフがあります。

    public static DirectedGraph<Point, DefaultEdge> directedGraph = new DefaultDirectedGraph<Point, DefaultEdge>(DefaultEdge.class);

 void setup() { 

  Point myPoint = new Point(x, y);
  Point myNextPoint = new Point(xToFillNext, yToFillNext);
  directedGraph.addVertex(myPoint);
  directedGraph.addVertex(myNextPoint);
  directedGraph.addEdge(myPoint, myNextPoint);

  Point mySecondPoint = new Point(x, y);
  Point mySecondNextPoint = new Point(xToFillNext, yToFillNext);
  directedGraph.addVertex(mySecondPoint);
  directedGraph.addVertex(mySecondNextPoint);
  directedGraph.addEdge(mySecondPoint, mySecondNextPoint);

System.out.println("#vertices: "+ directedGraph.vertexSet());

}

 public static class Point {

  public int x;
  public int y;

  public  Point(int x, int y) 
  {

    this.x = x;
    this.y = y;
  }
  @Override
    public String toString() {
    return ("[x="+x+" y="+y+"]");
  }

  @Override
public int hashCode() {
    int hash = 7;
    hash = 71 * hash + this.x;
    hash = 71 * hash + this.y;
    return hash;
}



@Override
public boolean equals(Object other) 
{
    if (this == other)
       return true;

    if (!(other instanceof Point))
       return false;

    Point otherPoint = (Point) other;
    return otherPoint.x == x && otherPoint.y == y;
}
}

次を使用して、頂点ごとの外側のエッジの数を取得したいと思います。

directedGraph.outDegreeOf()

しかし、頂点ごとに頂点を実行したくありません(これは、プログラム全体でより多くの頂点を持っているため、簡単に通過できるようにするための単純なコードです)、頂点セットを通過して戻りたいです頂点の数に関係なく、セットの各頂点の外向きエッジの数が自動的に計算されます。

これを行うにはどうすればよいですか?

(私はJavaに基づく処理を使用します)

4

2 に答える 2

2

JGrapht API を確認してください。

DirectedGraphインターフェイスには関数が含まれていますvertexSet()。これを使用して、追加した頂点を反復処理し、それぞれの頂点を取得できますoutDegreeValue()

for(Point p : directedGraph.vertexSet()){
   int degree = directedGraph.outDegreeOf(p);
   System.out.println("Degree of " p.toString() + ": " + degree);
}
于 2015-07-29T17:59:41.353 に答える
0

この情報が本質的に保存されているかどうかDirectedGraphはわかりませんが、hasmap を使用すると、エッジを追加しながらこの情報を簡単に保存できます。

HashMap<Integer,Integer>  outEdgesMap = new HashMap<Integer,Integer>();

あなたがやっている

directedGraph.addEdge(myPoint, myNextPoint);

この後も

outEdgesMap.put(myPoint,outEdgesMap.getOrDefault(myPoint,0)+1);

明確にするために、それは

directedGraph.addEdge(myPoint, myNextPoint);
outEdgesMap.put(myPoint,outEdgesMap.getOrDefault(myPoint,0)+1);

だからあなたのdirectedGraph.outDegreeOf()意志は

        for(Integer i : outEdgesMap.keySet()){
             sout(i+ " : " +outEdgesMap.get(i) );
        }
于 2015-07-29T17:48:14.913 に答える