/** * Returns whether a particular node is member of a cycle or not. * * @param node The tested node. * @return whether node is member of a cycle or not. */ public boolean nodeIsCycleMember(N node) { return areConnected(node, node); }
public boolean edgeIsCycleMember(E edge) { final N source = adapter.getTip(edge, EdgeTip.SOURCE); final N target = adapter.getTip(edge, EdgeTip.TARGET); return areConnected(target, source); }
@Test public void test() { final TestGraph g = new TestGraph(); final GraphCycles<TestGraphNode, TestGraphEdge> gc = new GraphCycles<>(g); final GraphTransitiveReduction<TestGraphNode, TestGraphEdge> gtr = new GraphTransitiveReduction<>(g); gtr.setEnabled(GraphBase.Feature.DEBUG, true); gtr.setPrefix(getClass().getSimpleName() + "-"); final int max = 10; for (int index = 0; index < 3; index++) { final int base = index * 100; for (int i1 = base; i1 < base + max; i1++) { for (int i2 = i1 + 1; i2 < base + max; i2++) { g.getOrCreateEdge(i1, i2); } } } gtr.printToGvIfDebug(g, "init"); final GraphAdapter<TestGraphNode, TestGraphEdge> reduction = gtr.computeTransitiveReduction(); gtr.printToGvIfDebug(reduction, "reduction"); final GraphCycles<TestGraphNode, TestGraphEdge> gctr = new GraphCycles<>(reduction); for (final TestGraphNode source : g.getNodes()) { for (final TestGraphNode target : g.getNodes()) { assertTrue(gc.areConnected(source, target) == gctr.areConnected(source, target)); } } } }
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))); assertFalse(gc.areConnected(g.getNode(0), g.getNode(0))); g.getOrCreateEdge(2, 3); assertFalse(gc.containsCycles()); assertTrue(gc.areConnected(g.getNode(0), g.getNode(1))); assertTrue(gc.areConnected(g.getNode(0), g.getNode(2))); assertTrue(gc.areConnected(g.getNode(0), g.getNode(3))); assertTrue(gc.areConnected(g.getNode(1), g.getNode(2))); assertTrue(gc.areConnected(g.getNode(1), g.getNode(3))); assertTrue(gc.areConnected(g.getNode(2), g.getNode(3)));
assertEquals(gc.areConnected(source, target), igc.areConnected(target, source));