Graph<Module> graph = new Graph<>(); graph.addNode(mod); Module fromNode = graph.getNode(module); if (fromNode == null) { fromNode = module; graph.addEdge(graph.new Edge( fromNode, mod)); Module fromNode = graph.getNode(module); if (fromNode == null) { fromNode = module; graph.addEdge(graph.new Edge( fromNode, mod)); return graph.topologicalSort();
Set<T> queue = getNodesWithNoIncomingEdges(); List<T> result = new ArrayList<>(); queue.remove(node); result.add(node); Set<Edge> edgesStarting = getEdgesStartingWith(node); for (Edge edge : edgesStarting) { edges.remove(edge); if (!hasIncomingEdges(edge.getToNode())) { queue.add(edge.getToNode());
/** * @throws CycleException * @see Graph#topologicalSort() */ @Test(expected = CycleException.class) public void topologicalSort_shouldThrowCycleException() throws CycleException { Graph<String> graph = new Graph<>(); graph.addNode("E"); graph.addNode("D"); graph.addNode("C"); graph.addNode("B"); graph.addNode("A"); graph.addEdge(graph.new Edge( "A", "B")); graph.addEdge(graph.new Edge( "A", "C")); graph.addEdge(graph.new Edge( "B", "C")); graph.addEdge(graph.new Edge( "B", "D")); graph.addEdge(graph.new Edge( "D", "A")); graph.topologicalSort(); }
public void topologicalSort_shouldSortGraphInTopologicalOrder() throws CycleException { Graph<String> graph = new Graph<>(); graph.addNode("E"); graph.addNode("D"); graph.addNode("C"); graph.addNode("B"); graph.addNode("A"); graph.addEdge(graph.new Edge( "A", "B")); graph.addEdge(graph.new Edge( "B", "C")); graph.addEdge(graph.new Edge( "A", "C")); graph.addEdge(graph.new Edge( "B", "D")); graph.addEdge(graph.new Edge( "D", "E")); List<String> sortedNodes = graph.topologicalSort(); Assert.assertTrue(sortedNodes.indexOf("A") < sortedNodes.indexOf("B")); Assert.assertTrue(sortedNodes.indexOf("A") < sortedNodes.indexOf("C"));