private void createVertexNumber() { c = graph.vertexSet().size(); vertexToVertexNumber = new HashMap<>(c); for (V vertex : graph.vertexSet()) { vertexToVertexNumber.put(vertex, new VertexNumber<V>(vertex, 0)); } stack = new ArrayDeque<>(c); B = new ArrayDeque<>(c); }
B.add(v.setNumber(stack.size() - 1)); for (E edge : visitedGraph.outgoingEdgesOf(v.getVertex())) { if (w.getNumber() == 0) { dfsVisit(graph, w); while (w.getNumber() < B.getLast()) B.removeLast(); if (v.getNumber() == (B.getLast())) { while (v.getNumber() <= (stack.size()-1)) { VertexNumber<V> r = stack.removeLast(); L.add(r.getVertex()); r.setNumber(c);
B.add(v.setNumber(stack.size() - 1)); for (E edge : visitedGraph.outgoingEdgesOf(v.getVertex())) { if (w.getNumber() == 0) { dfsVisit(graph, w); while (w.getNumber() < B.getLast()) B.removeLast(); if (v.getNumber() == (B.getLast())) { while (v.getNumber() <= (stack.size()-1)) { VertexNumber<V> r = stack.removeLast(); L.add(r.getVertex()); r.setNumber(c);
/** * Computes a {@link List} of {@link Set}s, where each set contains vertices * which together form a strongly connected component within the given * graph. * * @return <code>List</code> of <code>EquivalanceClass</code>es containing the strongly * connected components */ public List<Equivalences<V>> stronglyConnectedSets() { if (stronglyConnectedSets == null) { stronglyConnectedSets = new Vector<>(); // create VertexData objects for all vertices, store them createVertexNumber(); // perform DFS for (VertexNumber<V> data : vertexToVertexNumber.values()) { if (data.getNumber() == 0) { dfsVisit(graph, data); } } vertexToVertexNumber = null; stack = null; B = null; } return stronglyConnectedSets; }
/** * Computes a {@link List} of {@link Set}s, where each set contains vertices * which together form a strongly connected component within the given * graph. * * @return <code>List</code> of <code>EquivalanceClass</code>es containing the strongly * connected components */ public List<Equivalences<V>> stronglyConnectedSets() { if (stronglyConnectedSets == null) { stronglyConnectedSets = new Vector<>(); // create VertexData objects for all vertices, store them createVertexNumber(); // perform DFS for (VertexNumber<V> data : vertexToVertexNumber.values()) { if (data.getNumber() == 0) { dfsVisit(graph, data); } } vertexToVertexNumber = null; stack = null; B = null; } return stronglyConnectedSets; }
private void createVertexNumber() { c = graph.vertexSet().size(); vertexToVertexNumber = new HashMap<>(c); for (V vertex : graph.vertexSet()) { vertexToVertexNumber.put(vertex, new VertexNumber<V>(vertex, 0)); } stack = new ArrayDeque<>(c); B = new ArrayDeque<>(c); }