@Override public TraversalGraph<V, E> reconstructTraversalGraph() { if (currentStartNode == null) { throw new IllegalStateException( "You must call #calculate before " + "reconstructing the traversal graph."); } TraversalGraph<V, E> traversalGraph = new TraversalGraph<V, E>(graph.getEdgeFactory(), currentStartNode); for (V v : graph.vertexSet()) { Set<E> predEdges = (Set<E>) v.getPredecessorEdges(); for (E e : predEdges) { V source = graph.getEdgeSource(e); V target = graph.getEdgeTarget(e); traversalGraph.addVertex(source); traversalGraph.addVertex(target); if (v.equals(source)) { traversalGraph.addEdge(target, source).setBaseGraphEdge(e); } else if (v.equals(target)) { traversalGraph.addEdge(source, target).setBaseGraphEdge(e); } else { throw new IllegalStateException( "A vertex has a predecessor " + "edge not ending on itself."); } } } return traversalGraph; }
@Test public void testBFSFromVertexEight() { bfs.calculate(v8); assertTrue(graph.getVertex(8).getDistance() == 0); assertTrue(graph.getVertex(5).getDistance() == 1); assertTrue(graph.getVertex(6).getDistance() == 1); assertTrue(graph.getVertex(7).getDistance() == 1); assertTrue(graph.getVertex(4).getDistance() == 2); assertTrue(graph.getVertex(3).getDistance() == 3); assertTrue(graph.getVertex(2).getDistance() == 4); assertTrue(graph.getVertex(1).getDistance() == 5); sPT = bfs.reconstructTraversalGraph(); assertTrue(sPT.getRoot().equals(v8)); assertTrue(sPT.edgeSet().size() == 8); assertTrue(sPT.containsEdge(v8, v7)); assertTrue(sPT.containsEdge(v8, v5)); assertTrue(sPT.containsEdge(v5, v4)); assertTrue(sPT.containsEdge(v8, v6)); assertTrue(sPT.containsEdge(v6, v4)); assertTrue(sPT.containsEdge(v4, v3)); assertTrue(sPT.containsEdge(v3, v2)); assertTrue(sPT.containsEdge(v2, v1)); }