private void detectNonMemberNodes(RestrictionSubGraph<N, E> subgraph, GraphBasicQueries<N, E> q) { LOGGER.trace("Detect non-member nodes"); final Set<N> nonMemberNodes = new HashSet<>(); final int total = q.getNodesCount(); int index = 0; for (final N node : subgraph.getNodes()) { index++; LOGGER.trace(" " + index + "/" + total + " " + node); if (!nodeIsCycleMember(node)) { nonMemberNodes.add(node); } } for (final N node : nonMemberNodes) { subgraph.removeNode(node); } }
result.setHeight(0.1); result.setWidth(0.1); if (cycles != null && cycles.nodeIsCycleMember(node)) { result.setFontColor(GvX11Colors.RED); } else {
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); } }
assertFalse(gc.areConnected(g.getNode(0), g.getNode(0))); assertFalse(gc.areConnected(g.getNode(0), g.getNode(1))); assertFalse(gc.nodeIsCycleMember(g.getNode(0))); assertTrue(gc.areConnected(g.getNode(0), g.getNode(0))); assertFalse(gc.areConnected(g.getNode(0), g.getNode(1))); assertTrue(gc.nodeIsCycleMember(g.getNode(0))); assertFalse(gc.nodeIsCycleMember(g.getNode(1)));