Graph: countEdges
Verfasst: 18. Jun 2017 20:22
Ich komme gerade bei Graph: countEdges nicht weiter. Hier ist mein Code:
Wie man sieht, habe ich extra dafür gesorgt, dass Kanten, die die gleichen Knoten aber unterschiedliche Richtungen haben, nicht doppelt gezählt werden und keine Kanten ausgelassen werden, indem sowohl fanIn als auch fanOut überprüft wird. Trotzdem behaupten zwei Tests, dass ich zu wenig gezählt habe:
Hier scheint wenigstens eindeutig zu sein, was mein Algorithmus falsch macht, aber mal wieder bin ich mir nicht sicher, ob es nicht einfach ein Fehler im Test ist.
Kann mir jemand helfen?
Code: Alles auswählen
private void countEdgesRec(Node<N, E> node, HashSet<Edge<N, E>> edgeSet, HashSet<Node<N, E>> nodeSet)
{
if(node == null) return;
if(nodeSet.contains(node)) return;
nodeSet.add(node);
for(Edge<N,E> edge : node.getFanOut())
{
countEdgesRec(edge.getTargetNode(),edgeSet,nodeSet);
if(edgeSet.contains(edge)) continue;
boolean b = false;
for(Edge<N,E> otherEdge : edge.getTargetNode().getFanOut())
{
if(otherEdge.getTargetNode() == node && edgeSet.contains(otherEdge))
{
b = true;
break;
}
}
if(b) continue;
edgeSet.add(edge);
}
for(Edge<N,E> edge : node.getFanIn())
{
countEdgesRec(edge.getSourceNode(),edgeSet,nodeSet);
if(edgeSet.contains(edge)) continue;
boolean b = false;
for(Edge<N,E> otherEdge : edge.getSourceNode().getFanIn())
{
if(otherEdge.getSourceNode() == node && edgeSet.contains(otherEdge))
{
b = true;
break;
}
}
if(b) continue;
edgeSet.add(edge);
}
}
Code: Alles auswählen
public int countEdgesInConnectedGraph(Node<N, E> node)
{
if(node == null) return -1;
if(!contains(node)) return -1;
HashSet<Edge<N, E>> edgeSet = new HashSet<Edge<N, E>>();
HashSet<Node<N, E>> nodeSet = new HashSet<Node<N, E>>();
countEdgesRec(node,edgeSet,nodeSet);
return edgeSet.size();
}
Code: Alles auswählen
Antwort des Servers
Junitreport
Time – 281
Testcount – 12
Failurecount – 2
Ignorerecount – 0
Failurereport
Testheadder – testTwoFullyConnectedDirectedGraphs(graph.general.CountEdgesTest)
Message – The partial graph has an edge amount of 12 but function returned 6 expected:<12> but was:<6>
Trace
Failurereport
Testheadder – testTwoFullyConnectedDirectedGraphsWithBridge(graph.general.CountEdgesTest)
Message – The partial graph has an edge amount of 25 but function returned 13 expected:<25> but was:<13>
Trace
Kann mir jemand helfen?