2015-07-29 1 views
1

J'ai un digraphe créé à l'aide:Numéro de retour des bords de chaque sommet dans un graphe orienté (JGraphT)

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; 
} 
} 

Je voudrais obtenir le nombre d'arêtes vers l'extérieur par sommet à l'aide:

directedGraph.outDegreeOf() 

mais je ne veux pas le faire par sommet (c'est un code simple pour le rendre plus facile, dans tout mon programme j'ai beaucoup plus de vertices) et je voudrais passer par le vertex set et renvoie le nombre d'arêtes extérieures pour chaque sommet de l'ensemble automatiquement, quel que soit le nombre de sommets.

Comment dois-je procéder pour faire cela?

(j'utiliser le traitement qui est basé sur java)

+0

Que voulez-vous dire exactement quand vous dites « mais je ne veux pas le faire par le sommet sommet"? –

Répondre

0

Consultez le JGrapht API. L'interface DirectedGraph contient une fonction vertexSet(). Vous pouvez l'utiliser pour itérer sur les vertex que vous avez ajoutés, et vous pouvez obtenir le outDegreeValue() de chacun:

for(Point p : directedGraph.vertexSet()){ 
    int degree = directedGraph.outDegreeOf(p); 
    System.out.println("Degree of " p.toString() + ": " + degree); 
} 
0

Je ne sais pas si DirectedGraph stocke ces informations par nature ou non, mais vous pouvez facilement stocker ces informations tout en ajoutant le bord, en utilisant un hasmap.

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

vous faites

directedGraph.addEdge(myPoint, myNextPoint); 

après font également

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

Pour être clair, il sera

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

Ainsi, votre directedGraph.outDegreeOf() sera

 for(Integer i : outEdgesMap.keySet()){ 
      sout(i+ " : " +outEdgesMap.get(i)); 
     } 
+0

Merci pour votre aide! cela fonctionne-t-il après si je le fais: System.out.println (outEdgedMap); avoir affiché le nombre d'arêtes extérieures pour chaque sommet? –

+1

Non, j'ai ajouté cette partie aussi. – Karthik

+0

est outEdgesMap partie de la bibliothèque jgrapht? Je ne trouve rien à ce sujet et mon programme ne semble pas le reconnaître. Ai-je besoin de le définir? –