public LoopSearch(Digraph digraph) { this.digraph = digraph; vertexIterator = IteratorUtils.filteredIterator(digraph.vertexIterator(), new Predicate() { public boolean evaluate(Object vertex) { return LoopSearch.this.digraph.hasArc(vertex, vertex); } }); }
public IndegreeTopologicalSort(Digraph digraph) { this.digraph = digraph; for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object vertex = i.next(); vertices.add(vertex); inDegrees.put(vertex, new InDegree(digraph.incomingSize(vertex))); } current = vertices.listIterator(); }
public static Map shiftLevelsDown(Map vertexLevelMap, Digraph digraph) { for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object rootCandidate = i.next(); if (digraph.incomingSize(rootCandidate) == 0) shiftLevelsDown(vertexLevelMap, digraph, rootCandidate); } return vertexLevelMap; }
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 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 void convert(Digraph digraph) { for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object origin = i.next(); String key = vertexAccessor.getId(origin).toString(); StringBuffer value = new StringBuffer(); boolean firstDst = true; for (ArcIterator j = digraph.outgoingIterator(origin); j.hasNext();) { j.next(); if (firstDst) { value.append(vertexAccessor.getId(j.getDestination())); firstDst = false; } else value.append(';').append(j.getDestination()); } graphData.setProperty(key, value.toString()); } } public void setVertexAccessor(DataAccessor vertexAccessor) {
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; }
public static boolean isTree(Digraph digraph) { Object root = null; for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object vertex = i.next(); int inSize = digraph.incomingSize(vertex); if (inSize == 0) { root = vertex; break; } } //not a tree - no vertex with 0 in-degree if (root == null) return false; //try to reach all vertices from the root candidate BreadthFirstSearch traversal = new BreadthFirstSearch(digraph, root); while (traversal.isValidTree() && traversal.hasNext()) traversal.next(); //not a tree - one of vertices has been seen more than once by the BFS if (!traversal.isValidTree()) return false; //has every vertex been reached? Set seenVertices = traversal.getSeenVertices(); for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) if (!seenVertices.contains(i.next())) return false; //all tests are passed - good! return true; }
double levelHeight = 0; boolean first = true; for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object vertex = i.next(); RectangularShape shape = (RectangularShape)vertexShape.get(vertex);
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); } }
Rectangle2D areaBounds = new Rectangle2D.Double(0, 0, 500, 500); Map vertexShapeMap = new HashMap(); for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object vertex = i.next(); vertexShapeMap.put(vertex, vertexRect.clone()); System.out.println("Vertices:"); Attribute vshape = layout.getVertexShape(); for (Iterator i = digraph.vertexIterator(); i.hasNext();) { Object vertex = i.next(); System.out.println(vertex + ": " + vshape.get(vertex));
double verticalSpacing = 5; Object root = null; for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object vertex = i.next(); vertexShapeMap.put(vertex, shapePattern.clone());
for (Iterator i = digraph.vertexIterator(); i.hasNext(); ) { Object vertex = i.next(); int rank = rankFunction.intValue(vertex);