private void test(int seed) { RandomGraphGenerator rg = new RandomGraphGenerator(seed); rg.setNodeCount(100); rg.setEdgeCount(300); rg.allowCycles(true); Graph graph1 = rg.generate(); EdgeMap cycleEdge = Maps.createIndexEdgeMap(new boolean[graph1.E()]); // find a set of edges whose reversal make the given graph // acyclic. reverse whose edges t1.start(); Cycles.findCycleEdges(graph1, cycleEdge); int count1 = 0; for (EdgeCursor ec = graph1.edges(); ec.ok(); ec.next()) { if (cycleEdge.getBool(ec.edge())) { graph1.reverseEdge(ec.edge()); count1++; } } t1.stop(); // check acyclicity of graph if (GraphChecker.isCyclic(graph1)) { D.bug("graph1 still contains cycles!!!"); EdgeList cycle = Cycles.findCycle(graph1, true); error("cycle = " + cycle); } rg.setSeed(seed); Graph graph2 = rg.generate(); // use alternative DFS based method to detect // with a set of cyclicity edges. t2.start(); Cycles.findCycleEdgesDFS(graph2, cycleEdge); int count2 = 0; for (EdgeCursor ec = graph2.edges(); ec.ok(); ec.next()) { if (cycleEdge.getBool(ec.edge())) { graph2.reverseEdge(ec.edge()); count2++; } } t2.stop(); if (GraphChecker.isCyclic(graph2)) { D.bug("graph2 still contains cycles!!!"); EdgeList cycle = Cycles.findCycle(graph2, true); error("cycle = " + cycle); } akku1 += count1; akku2 += count2; }