/** * Computes the set of nodes and edges that are participating to cycles. * * @param nodes Collection of nodes that will be filled with nodes participating to a cycle. * This collection is cleared on startup. * @param edges Collection of edges that will be filled with edges participating to a cycle. * This collection is cleared on startup. */ public void computeCyclesMembers(Collection<N> nodes, Collection<E> edges) { final ExplicitSubGraph<N, E> subgraph = computeCyclesMembers(); // All remaining nodes and edges are participating to cycles. nodes.clear(); for (final N node : subgraph.getNodes()) { nodes.add(node); } edges.clear(); for (final E edge : subgraph.getEdges()) { edges.add(edge); } }
public static void main(String[] args) { final TestGraph g = new TestGraph(); final TestGraphNode n1 = g.createNode("N1"); final TestGraphNode n2 = g.createNode("N2"); final TestGraphNode n3 = g.createNode("N3"); final TestGraphNode n4 = g.createNode("N4"); final TestGraphNode n5 = g.createNode("N5"); g.createEdge("E12", n1, n2); g.createEdge("E21", n2, n1); g.createEdge("E13", n1, n3); g.createEdge("E34", n3, n4); g.createEdge("E45", n4, n5); g.createEdge("E54", n5, n4); GraphPrinter.print(g, true, System.out); final GraphCycles<TestGraphNode, TestGraphEdge> cycles = new GraphCycles<>(g); cycles.setEnabled(Feature.DEBUG, true); cycles.setEnabled(Feature.VERBOSE, true); System.out.println(cycles.containsCycles()); for (final TestGraphNode node : g.getNodes()) { System.out.println(node + ": " + cycles.nodeIsCycleMember(node)); } final ExplicitSubGraph<TestGraphNode, TestGraphEdge> kernel = cycles.computeCyclesMembers(); GraphPrinter.print(kernel, true, System.out); } }
gc.computeCyclesMembers(nodes, edges); assertTrue(nodes.contains(g.getNode(0))); assertTrue(nodes.contains(g.getNode(1)));