@Override public final Iterable<N> getNodes() { return delegate.getNodes(); }
/** * @return a collection of nodes. */ public final Collection<N> getNodes() { final List<N> nodes = new ArrayList<>(); for (final N node : adapter.getNodes()) { nodes.add(node); } return nodes; }
/** * @return the number of nodes. */ public final int getNodesCount() { return Iterables.size(adapter.getNodes()); }
/** * @return a set of all root nodes. */ public final Set<N> getRoots() { final Set<N> roots = new HashSet<>(); for (final N node : adapter.getNodes()) { if (isRoot(node)) { roots.add(node); } } return roots; }
@Override public final Iterable<N> getNodes() { return Iterables.filter(delegate.getNodes(), isOwnedNode); }
@Override public final Iterable<N> getNodes() { return Iterables.filter(delegate.getNodes(), nodePredicate); }
public boolean eval() { visited.clear(); critical.clear(); for (final N node : adapter.getNodes()) { if (!visited.contains(node)) { final boolean found = visit(node); if (found) { return true; } } } return false; }
/** * @return a set of all leaf nodes. */ public final Set<N> getLeaves() { final Set<N> leaves = new HashSet<>(); for (final N node : adapter.getNodes()) { if (isLeaf(node)) { leaves.add(node); } } return leaves; } }
public final boolean hasNodes() { return !Iterables.isEmpty(adapter.getNodes()); }
/** * Computes all connected components of a graph. * * @return A list of all connected components subgraphs. */ public List<GraphAdapter<N, E>> computeConnectedComponents() { final List<GraphAdapter<N, E>> result = new ArrayList<>(); final Set<N> todo = new HashSet<>(); for (final N node : adapter.getNodes()) { todo.add(node); } while (!todo.isEmpty()) { final N node = todo.iterator().next(); final GraphAdapter<N, E> subgraph = computeConnectedComponents(node); result.add(subgraph); for (final N n : subgraph.getNodes()) { todo.remove(n); } } return result; } }
@Override public final void clear() { reset(); for (final N node : delegate.getNodes()) { removedNodes.add(node); } for (final E edge : delegate.getEdges()) { removedEdges.add(edge); } }
/** * Find all simple node paths in the underlying graph. * * @return A set of all simple paths in the graph. */ public Set<GraphPath<N>> findAllSimpleNodePaths() { final Set<GraphPath<N>> result = new HashSet<>(); for (final N source : getAdapter().getNodes()) { for (final N target : getAdapter().getNodes()) { final Set<GraphPath<N>> paths = findSimpleNodePathsBetween(source, target); result.addAll(paths); } } return result; } }
/** * Find all simple node paths arriving to a target node. * * @param target The target node. * @return All simple paths arriving to target. */ public Set<GraphPath<N>> findAllSimpleNodePathsTo(N target) { final Set<GraphPath<N>> result = new HashSet<>(); for (final N source : getAdapter().getNodes()) { final Set<GraphPath<N>> paths = findSimpleNodePathsBetween(source, target); result.addAll(paths); } return result; }
/** * Finds all simple node paths starting from a source node. * * @param source The source node. * @return A set of all simple paths starting from source. */ public Set<GraphPath<N>> findSimpleNodePathsFrom(N source) { final Set<GraphPath<N>> result = new HashSet<>(); for (final N target : getAdapter().getNodes()) { final Set<GraphPath<N>> paths = findSimpleNodePathsBetween(source, target); result.addAll(paths); } return result; }
/** * Print a graph (adapter) to an output stream. * * @param <N> Node class. * @param <E> Edge class. * @param adapter The graph adapter. * @param details If true, print detailed information. * @param out The stream to use. */ public static <N, E> void print(GraphAdapter<N, E> adapter, boolean details, PrintStream out) { final GraphBasicQueries<N, E> q = new GraphBasicQueries<>(adapter); out.println("Nodes: " + q.getNodesCount() + " Edges: " + q.getEdgesCount()); if (details) { for (final N node : adapter.getNodes()) { out.println(" " + node); } for (final E edge : adapter.getEdges()) { out.println(" " + edge); } } } }
void write(GvWriter writer) throws IOException { writer.beginGraph("g", true, null); for (final N node : adapter.getNodes()) { writer.addNode(getNodeId(node), getNodeAttributes(node, basic)); } for (final E edge : adapter.getEdges()) { writer.addEdge(getNodeId(adapter.getTip(edge, EdgeTip.SOURCE)), getNodeId(adapter.getTip(edge, EdgeTip.TARGET)), getEdgeAttributes(edge)); } writer.endGraph(); } }