public V next() { V v = deque.removeFirst(); for (E e : graph.getOutwardEdges(v)) { @SuppressWarnings("unchecked") V target = (V) e.target; if (set.add(target)) { deque.addLast(target); } } return v; }
public V next() { V v = deque.removeFirst(); for (E e : graph.getOutwardEdges(v)) { @SuppressWarnings("unchecked") V target = (V) e.target; if (set.add(target)) { deque.addLast(target); } } return v; }
/** Populates a set with the nodes reachable from a given node. */ public static <V, E extends DefaultEdge> void reachable(Set<V> set, final DirectedGraph<V, E> graph, final V root) { final Deque<V> deque = new ArrayDeque<>(); deque.add(root); set.add(root); while (!deque.isEmpty()) { V v = deque.removeFirst(); for (E e : graph.getOutwardEdges(v)) { @SuppressWarnings("unchecked") V target = (V) e.target; if (set.add(target)) { deque.addLast(target); } } } }
/** Populates a set with the nodes reachable from a given node. */ public static <V, E extends DefaultEdge> void reachable(Set<V> set, final DirectedGraph<V, E> graph, final V root) { final Deque<V> deque = new ArrayDeque<>(); deque.add(root); set.add(root); while (!deque.isEmpty()) { V v = deque.removeFirst(); for (E e : graph.getOutwardEdges(v)) { @SuppressWarnings("unchecked") V target = (V) e.target; if (set.add(target)) { deque.addLast(target); } } } }
private static <V, E extends DefaultEdge> void buildListRecurse( Collection<V> list, Set<V> activeVertices, DirectedGraph<V, E> graph, V start) { if (!activeVertices.add(start)) { return; } list.add(start); List<E> edges = graph.getOutwardEdges(start); for (E edge : edges) { //noinspection unchecked buildListRecurse(list, activeVertices, graph, (V) edge.target); } activeVertices.remove(start); }
private static <V, E extends DefaultEdge> void buildListRecurse( Collection<V> list, Set<V> activeVertices, DirectedGraph<V, E> graph, V start) { if (!activeVertices.add(start)) { return; } list.add(start); List<E> edges = graph.getOutwardEdges(start); for (E edge : edges) { //noinspection unchecked buildListRecurse(list, activeVertices, graph, (V) edge.target); } activeVertices.remove(start); }
private boolean isDependent(final DirectedGraph<Integer, DefaultEdge> graph, final List<Integer> rank, final int ordinal1, final int ordinal2) { if (rank.get(ordinal2) > rank.get(ordinal1)) { return isDependent(graph, rank, ordinal2, ordinal1); } // Check if the expression in ordinal1 // could depend on expression in ordinal2 by Depth-First-Search final Deque<Integer> dfs = new ArrayDeque<>(); final Set<Integer> visited = new HashSet<>(); dfs.push(ordinal2); while (!dfs.isEmpty()) { int source = dfs.pop(); if (visited.contains(source)) { continue; } if (source == ordinal1) { return true; } visited.add(source); for (DefaultEdge e : graph.getOutwardEdges(source)) { int target = (int) e.target; if (rank.get(target) < rank.get(ordinal1)) { dfs.push(target); } } } return false; }
private boolean isDependent(final DirectedGraph<Integer, DefaultEdge> graph, final List<Integer> rank, final int ordinal1, final int ordinal2) { if (rank.get(ordinal2) > rank.get(ordinal1)) { return isDependent(graph, rank, ordinal2, ordinal1); } // Check if the expression in ordinal1 // could depend on expression in ordinal2 by Depth-First-Search final Deque<Integer> dfs = new ArrayDeque<>(); final Set<Integer> visited = new HashSet<>(); dfs.push(ordinal2); while (!dfs.isEmpty()) { int source = dfs.pop(); if (visited.contains(source)) { continue; } if (source == ordinal1) { return true; } visited.add(source); for (DefaultEdge e : graph.getOutwardEdges(source)) { int target = (int) e.target; if (rank.get(target) < rank.get(ordinal1)) { dfs.push(target); } } } return false; }
for (RelTableRef tRef : graph.vertexSet()) { if (graph.getInwardEdges(tRef).size() == 1 && graph.getOutwardEdges(tRef).isEmpty()) {
for (RelTableRef tRef : graph.vertexSet()) { if (graph.getInwardEdges(tRef).size() == 1 && graph.getOutwardEdges(tRef).isEmpty()) {
final List<DefaultEdge> out1 = g.getOutwardEdges("A"); final boolean b3 = g.addVertex("A"); assertFalse(b3); final List<DefaultEdge> in2 = g.getInwardEdges("A"); final List<DefaultEdge> out2 = g.getOutwardEdges("A"); assertEquals(in1, in2); assertEquals(out1, out2);
final List<DefaultEdge> out1 = g.getOutwardEdges("A"); final boolean b3 = g.addVertex("A"); assertFalse(b3); final List<DefaultEdge> in2 = g.getInwardEdges("A"); final List<DefaultEdge> out2 = g.getOutwardEdges("A"); assertEquals(in1, in2); assertEquals(out1, out2);