Seite 1 von 1

Graph: countEdges Wie unterscheiden zwischen gerichtetem und ingerichtetem Graphen?

Verfasst: 25. Jun 2017 13:08
von Vykyfikation
Hallo, ich kamm grade nicht darauf, wie ich bei der Methode countEdgesRec zwischen gerichtetem und ungerichtetem graphen unterscheiden soll.
ich bekomm für die ungerichteten Graphen immer das doppelte raus.

Code: Alles auswählen

private void countEdgesRec(Node<N, E> node, HashSet<Edge<N, E>> edgeSet, HashSet<Node<N, E>> nodeSet)
{
    if(!nodeSet.contains(node)){
        nodeSet.add(node);
        for(Edge e: node.getFanOut()){
            if(!edgeSet.contains(e)){
                edgeSet.add(e);
                countEdgesRec(e.getTargetNode(),edgeSet,nodeSet);
            }
        }
        for(Edge e: node.getFanIn()){
            if(!edgeSet.contains(e)){
                edgeSet.add(e);
                countEdgesRec(e.getSourceNode(),edgeSet,nodeSet);
            }
        }
    }
}

Re: Graph: countEdges Wie unterscheiden zwischen gerichtetem und ingerichtetem Graphen?

Verfasst: 25. Jun 2017 15:13
von Kabooom
Du musst nicht überprüfen ob das edgeSet die gerade untersuchte Kante enthält (die kann noch gar nicht im edgeSet sein) sondern ob e.getLinkedEdge() schon enthalten ist, da e und e.getLinkedEdge() in einem ungerichteten Graphen als eine Kante betrachtet werden. Der rekursive Aufruf kann dann unabhängig davon ausgeführt werden, ob die Kante ins edgeSet aufgenommen wurde oder nicht.

Re: Graph: countEdges Wie unterscheiden zwischen gerichtetem und ingerichtetem Graphen?

Verfasst: 25. Jun 2017 21:17
von LukasPhysiker
Um zu überprüfen, ob ein Graph gerichtet oder ungerichtet ist, kannst du folgenden Code verwenden:

Code: Alles auswählen

if(this instanceof UndirectedGraph)