import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
private Set<V> vertices;
private DirectedGraphAccessor<V, ? extends Edge> graph;
private Set<V> analyzedVertices;
- private Set<Cycle> cycles = new HashSet<Cycle>();
+ private Set<Cycle> cycles = new LinkedHashSet<Cycle>();
private Set<Edge> edgesToExclude;
private long searchCyclesCalls = 0;
private int maxSearchDepth = -1;
private int maxCyclesToFound = Integer.MAX_VALUE;
public CycleDetector(DirectedGraphAccessor<V, ? extends Edge> graph, Collection<V> vertices) {
- init(graph, vertices, new HashSet<Edge>());
+ init(graph, vertices, new LinkedHashSet<Edge>());
}
public CycleDetector(DirectedGraphAccessor<V, ? extends Edge> graph, Collection<V> vertices, Set<Edge> edgesToExclude) {
}
public CycleDetector(DirectedGraphAccessor<V, ? extends Edge> graph) {
- init(graph, graph.getVertices(), new HashSet<Edge>());
+ init(graph, graph.getVertices(), new LinkedHashSet<Edge>());
}
public CycleDetector(DirectedGraphAccessor<V, ? extends Edge> graph, Set<Edge> edgesToExclude) {
private void init(DirectedGraphAccessor<V, ? extends Edge> graph, Collection<V> vertices, Set<Edge> edgesToExclude) {
this.graph = graph;
- this.vertices = new HashSet<V>(vertices);
- this.analyzedVertices = new HashSet<V>();
+ this.vertices = new LinkedHashSet<V>(vertices);
+ this.analyzedVertices = new LinkedHashSet<V>();
this.edgesToExclude = edgesToExclude;
}
try {
for (V vertex : vertices) {
if (maxSearchDepthActivated || !analyzedVertices.contains(vertex)) {
- Set<V> tmpAnalyzedVertices = new HashSet<V>();
+ Set<V> tmpAnalyzedVertices = new LinkedHashSet<V>();
searchCycles(vertex, new ArrayList<V>(), tmpAnalyzedVertices);
analyzedVertices.addAll(tmpAnalyzedVertices);
}
for (Edge<V> edge : graph.getOutgoingEdges(fromVertex)) {
V toVertex = edge.getTo();
if (!edgesToExclude.contains(edge) && vertices.contains(toVertex)
- && (maxSearchDepthActivated || !analyzedVertices.contains(toVertex))) {
+ && (maxSearchDepthActivated || !analyzedVertices.contains(toVertex))) {
if (path.contains(toVertex)) {
path.add(toVertex);
List<V> cyclePath = path.subList(path.indexOf(toVertex), path.size());