private List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start, Visitor<T> visitor) { List<Vertex<T>> visited = new ArrayList<>(); List<Vertex<T>> stack = new ArrayList<>(); Set<Vertex<T>> seen = new HashSet<>(visited); stack.add(start); seen.add(start); do { // mark as visited Vertex<T> next = stack.remove(stack.size() - 1); visited.add(next); if (!visitor.visit(next)) { return visited; } // add all non-visited adjacent vertices to the stack Set<Vertex<T>> adjacentVertices = graph.getAdjacentVertices(next); for (Vertex<T> v : adjacentVertices) { seen.add(v); stack.add(v); } } while (!stack.isEmpty()); return visited; }
private List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start, Visitor<T> visitor) { List<Vertex<T>> visited = new ArrayList<>(); List<Vertex<T>> stack = new ArrayList<>(); Set<Vertex<T>> seen = new HashSet<>(visited); stack.add(start); seen.add(start); do { // mark as visited Vertex<T> next = stack.remove(stack.size() - 1); visited.add(next); if (!visitor.visit(next)) { return visited; } // add all non-visited adjacent vertices to the stack Set<Vertex<T>> adjacentVertices = graph.getAdjacentVertices(next); for (Vertex<T> v : adjacentVertices) { seen.add(v); stack.add(v); } } while (!stack.isEmpty()); return visited; }
private List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start, Visitor<T> visitor) { List<Vertex<T>> visited = new ArrayList<Vertex<T>>(); List<Vertex<T>> stack = new ArrayList<Vertex<T>>(); Set<Vertex<T>> seen = new HashSet<Vertex<T>>(visited); stack.add(start); seen.add(start); do { // mark as visited Vertex<T> next = stack.remove(stack.size() - 1); visited.add(next); if (!visitor.visit(next)) { return visited; } // add all non-visited adjacent vertices to the stack Set<Vertex<T>> adjacentVertices = graph.getAdjacentVertices(next); for (Vertex<T> v : adjacentVertices) { seen.add(v); stack.add(v); } } while (!stack.isEmpty()); return visited; }