public int order() { return digraph.order(); }
public static boolean isConnected(Digraph digraph) { return isConnected(digraph, digraph.vertexIterator().next(), digraph.order()); }
public static boolean isStronglyConnected(Digraph digraph) { return isStronglyConnected(digraph, digraph.vertexIterator().next(), digraph.order()); }
public static Map computeLevels(Map vertexLevelMap, Digraph digraph, boolean longest) { if (vertexLevelMap == null) vertexLevelMap = new HashMap(digraph.order()); for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object rootCandidate = i.next(); if (digraph.incomingSize(rootCandidate) == 0) computeLevels(vertexLevelMap, digraph, rootCandidate, longest); } return vertexLevelMap; }
public static boolean isAcyclic(Digraph digraph) { int order = digraph.order(); if (order == 0) return true; Set spanned = new HashSet(order); DepthFirstStampSearch dfs = new DepthFirstStampSearch(digraph, digraph.vertexIterator().next()); for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object dfsRoot = i.next(); if (spanned.contains(dfsRoot)) continue; dfs.reset(dfsRoot); Map dfsOrders = dfs.traverse(new HashMap(digraph.order())); for (Iterator j = dfsOrders.entrySet().iterator(); j.hasNext();) { Map.Entry entry = (Map.Entry)j.next(); Object origin = entry.getKey(); DepthFirstStampSearch.OrderPair orgOrders = (DepthFirstStampSearch.OrderPair)entry.getValue(); spanned.add(origin); for (ArcIterator k = digraph.outgoingIterator(origin); k.hasNext();) { k.next(); Object dst = k.getDestination(); DepthFirstStampSearch.OrderPair dstOrders = (DepthFirstStampSearch.OrderPair)dfsOrders.get(dst); if (dstOrders.getPostOrder() > orgOrders.getPostOrder()) return false; } } if (dfsOrders.size() == order) break; } return true; }
sequencesByTable = new HashMap(tableCount); Algorithm sorter = new IndegreeTopologicalSort(graph); List sortedVertices = new ArrayList(graph.order()); while (sorter.hasNext()) sortedVertices.add(sorter.next());
IndegreeTopologicalSort sorter = new IndegreeTopologicalSort( contractedReferentialDigraph); components = new HashMap(contractedReferentialDigraph.order()); int componentIndex = 0; while (sorter.hasNext()) {
IndegreeTopologicalSort sorter = new IndegreeTopologicalSort( contractedReferentialDigraph); components = new HashMap(contractedReferentialDigraph.order()); int componentIndex = 0; while (sorter.hasNext()) {
private void createWrapperDigraph() { wrapperDigraph = new MapDigraph(MapDigraph.HASHMAP_FACTORY); vertexWrapperMap = new HashMap(digraph.order()); for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object vertex = i.next(); VertexWrapper wrapper = new VertexWrapper(vertex); vertexWrapperMap.put(vertex, wrapper); wrapperDigraph.addVertex(wrapper); } for (ArcIterator i = digraph.arcIterator(); i.hasNext();) { i.next(); Object wrapper1 = vertexWrapperMap.get(i.getOrigin()); Object wrapper2 = vertexWrapperMap.get(i.getDestination()); if (rootsUpwards) wrapperDigraph.putArc(wrapper1, wrapper2, Boolean.TRUE); else wrapperDigraph.putArc(wrapper2, wrapper1, Boolean.TRUE); } }
private void init(Digraph digraph) { vertexRankMap = new HashMap(digraph.order()); IndegreeTopologicalSort traversal = new IndegreeTopologicalSort(digraph); while (traversal.hasNext()) { Object vertex = traversal.next(); int rank = -1; for (ArcIterator i = digraph.incomingIterator(vertex); i.hasNext(); ) { i.next(); Object predecessor = i.getOrigin(); int predRank = intValue(predecessor); if (predRank < 0) throw new ArithmeticException("Ranking failed."); rank = Math.max(rank, predRank); } rank++; assignRank(vertex, rank); } }
public void doLayout() { // will operate on digraph of vertex wrappers instead of the original // digraph createWrapperDigraph(); // classify vertices by level (longest type) wrapperLevelMap = GraphUtils.computeLevels(new HashMap(wrapperDigraph .order()), wrapperDigraph, true); // shift vertices to leaves if possible // GraphUtils.shiftLevelsDown(vertexLevelMap, digraph); // split long arcs - make (k,2)partite digraph splitLongArcs(); // fill array of vertex levels createLevels(); // minimize number of arc intersections between each two levels // via barycentric method minimizeArcIntersections(); // adjust vertices horizontally to minimize arc lengths minimizeDistancesToBarycentres(); // finally, compute coordinates of vertices and arcs computeGeometry(); }
Map vertexMap = new HashMap(digraph.order()); longArcDigraph = new MapDigraph(); for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) {