List of usage examples for com.google.common.graph Network nodes
Set<N> nodes();
From source file:edu.uci.ics.jung.graph.util.TreeUtils.java
/** * A graph is "forest-shaped" if it is directed, acyclic, and each node has at most one * predecessor./*from ww w. j a v a2 s . co m*/ */ public static <N> boolean isForestShaped(Network<N, ?> graph) { checkNotNull(graph, "graph"); return graph.isDirected() && !Graphs.hasCycle(graph) && graph.nodes().stream().allMatch(node -> graph.predecessors(node).size() <= 1); }
From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java
/** * Returns a list of all distinct paths from roots of the network to leaves. The list can be in * arbitrary orders and can contain duplicate paths if there are multiple edges from two nodes. *///w ww. j a va 2 s. com public static <NodeT, EdgeT> List<List<NodeT>> allPathsFromRootsToLeaves(Network<NodeT, EdgeT> network) { ArrayDeque<List<NodeT>> paths = new ArrayDeque<>(); // Populate the list with all roots for (NodeT node : network.nodes()) { if (network.inDegree(node) == 0) { paths.add(ImmutableList.of(node)); } } List<List<NodeT>> distinctPathsFromRootsToLeaves = new ArrayList<>(); while (!paths.isEmpty()) { List<NodeT> path = paths.removeFirst(); NodeT lastNode = path.get(path.size() - 1); if (network.outDegree(lastNode) == 0) { distinctPathsFromRootsToLeaves.add(new ArrayList<>(path)); } else { for (EdgeT edge : network.outEdges(lastNode)) { paths.addFirst(ImmutableList.<NodeT>builder().addAll(path) .add(network.incidentNodes(edge).target()).build()); } } } return distinctPathsFromRootsToLeaves; }
From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java
public static <N, E> String toDot(Network<N, E> network) { StringBuilder builder = new StringBuilder(); builder.append("digraph network {\n"); Map<N, String> nodeName = Maps.newIdentityHashMap(); network.nodes().forEach(node -> nodeName.put(node, "n" + nodeName.size())); for (Entry<N, String> nodeEntry : nodeName.entrySet()) { builder.append(String.format(" %s [fontname=\"Courier New\" label=\"%s\"];\n", nodeEntry.getValue(), escapeDot(nodeEntry.getKey().toString()))); }//from www. j av a 2 s . co m for (E edge : network.edges()) { EndpointPair<N> endpoints = network.incidentNodes(edge); builder.append(String.format(" %s -> %s [fontname=\"Courier New\" label=\"%s\"];\n", nodeName.get(endpoints.source()), nodeName.get(endpoints.target()), escapeDot(edge.toString()))); } builder.append("}"); return builder.toString(); }
From source file:org.apache.beam.runners.core.construction.graph.Networks.java
public static <NodeT, EdgeT> String toDot(Network<NodeT, EdgeT> network) { StringBuilder builder = new StringBuilder(); builder.append(String.format("digraph network {%n")); Map<NodeT, String> nodeName = Maps.newIdentityHashMap(); network.nodes().forEach(node -> nodeName.put(node, "n" + nodeName.size())); for (Entry<NodeT, String> nodeEntry : nodeName.entrySet()) { builder.append(String.format(" %s [fontname=\"Courier New\" label=\"%s\"];%n", nodeEntry.getValue(), escapeDot(nodeEntry.getKey().toString()))); }/*from w ww . ja va 2s .co m*/ for (EdgeT edge : network.edges()) { EndpointPair<NodeT> endpoints = network.incidentNodes(edge); builder.append(String.format(" %s -> %s [fontname=\"Courier New\" label=\"%s\"];%n", nodeName.get(endpoints.source()), nodeName.get(endpoints.target()), escapeDot(edge.toString()))); } builder.append("}"); return builder.toString(); }
From source file:org.apache.beam.runners.core.construction.graph.Networks.java
/** * Return a set of nodes in sorted topological order. * * <p>Note that back edges within directed graphs are "broken" returning a topological order for a * directed acyclic network which approximates the original network. * * <p>Nodes will be considered in the order specified by the {@link * ElementOrder#sorted(Comparator) sorted ElementOrder} created with the provided comparator. *//*from w ww .ja v a2s . c o m*/ public static <NodeT, EdgeT> Iterable<NodeT> topologicalOrder(Network<NodeT, EdgeT> network, Comparator<NodeT> nodeOrder) { // Copy the characteristics of the network to ensure that the result network can represent the // original network, just with the provided suborder MutableNetwork<NodeT, EdgeT> orderedNetwork = NetworkBuilder.from(network) .nodeOrder(ElementOrder.sorted(nodeOrder)).build(); for (NodeT node : network.nodes()) { orderedNetwork.addNode(node); } for (EdgeT edge : network.edges()) { EndpointPair<NodeT> incident = network.incidentNodes(edge); orderedNetwork.addEdge(incident.source(), incident.target(), edge); } return computeTopologicalOrder(orderedNetwork); }
From source file:org.apache.beam.runners.dataflow.worker.graph.Networks.java
/** Returns a set of nodes sorted in topological order. */ public static <N, E> Set<N> topologicalOrder(Network<N, E> network) { // TODO: Upgrade Guava and remove this method if topological sorting becomes // supported externally or remove this comment if its not going to be supported externally. checkArgument(network.isDirected(), "Only directed networks are supported, given %s", network); checkArgument(!network.allowsSelfLoops(), "Only networks without self loops are supported, given %s", network);/*w ww.j a va 2 s. co m*/ // Linked hashset will prevent duplicates from appearing and will maintain insertion order. LinkedHashSet<N> nodes = new LinkedHashSet<>(network.nodes().size()); Queue<N> processingOrder = new ArrayDeque<>(); // Add all the roots for (N node : network.nodes()) { if (network.inDegree(node) == 0) { processingOrder.add(node); } } while (!processingOrder.isEmpty()) { N current = processingOrder.remove(); // If all predecessors have already been added, then we can add this node, otherwise // we need to add the node to the back of the processing queue. if (nodes.containsAll(network.predecessors(current))) { nodes.add(current); processingOrder.addAll(network.successors(current)); } else { processingOrder.add(current); } } return nodes; }
From source file:dagger.internal.codegen.BindingGraphConverter.java
private ComponentNode rootComponentNode(Network<Node, Edge> network) { return (ComponentNode) Iterables.find(network.nodes(), node -> node instanceof ComponentNode && node.componentPath().atRoot()); }
From source file:edu.uci.ics.jung.visualization.BaseVisualizationModel.java
public void setNetwork(Network<N, E> network, boolean forceUpdate) { log.trace("setNetwork to n:{} e:{}", network.nodes(), network.edges()); this.network = network; this.layoutModel.setGraph(network.asGraph()); if (forceUpdate && this.layoutAlgorithm != null) { log.trace("will accept {}", layoutAlgorithm); layoutModel.accept(this.layoutAlgorithm); log.trace("will fire stateChanged"); changeSupport.fireStateChanged(); log.trace("fired stateChanged"); }//from ww w.j av a 2 s. c o m }
From source file:edu.uci.ics.jung.visualization.renderers.BasicRenderer.java
@Override public void render(RenderContext<N, E> renderContext, VisualizationModel<N, E> visualizationModel) { Network<N, E> network = visualizationModel.getNetwork(); // paint all the edges try {/* w w w . j av a 2s .c om*/ for (E e : network.edges()) { renderEdge(renderContext, visualizationModel, e); renderEdgeLabel(renderContext, visualizationModel, e); } } catch (ConcurrentModificationException cme) { renderContext.getScreenDevice().repaint(); } // paint all the nodes try { for (N v : network.nodes()) { renderNode(renderContext, visualizationModel, v); renderNodeLabel(renderContext, visualizationModel, v); } } catch (ConcurrentModificationException cme) { renderContext.getScreenDevice().repaint(); } }