- java.lang.Object
-
- org.jgrapht.alg.cycle.HawickJamesSimpleCycles<V,E>
-
- Type Parameters:
V
- the vertex type.E
- the edge type.
- All Implemented Interfaces:
DirectedSimpleCycles<V,E>
public class HawickJamesSimpleCycles<V,E> extends Object implements DirectedSimpleCycles<V,E>
Find all simple cycles of a directed graph using the algorithm described by Hawick and James.See:
K. A. Hawick, H. A. James. Enumerating Circuits and Loops in Graphs with Self-Arcs and Multiple-Arcs. Computational Science Technical Note CSTN-013, 2008- Author:
- Luiz Kill
-
-
Constructor Summary
Constructors Constructor Description HawickJamesSimpleCycles()
Create a simple cycle finder with an unspecified graph.HawickJamesSimpleCycles(Graph<V,E> graph)
Create a simple cycle finder for the specified graph.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearPathLimit()
This is the default behaviour of the algorithm.long
countSimpleCycles()
Count the number of simple cycles.void
findSimpleCycles(Consumer<List<V>> consumer)
Find the simple cycles of the graph.Graph<V,E>
getGraph()
Get the graphvoid
printSimpleCycles()
Print to the standard output all simple cycles without building a list to keep them, thus avoiding high memory consumption when investigating large and much connected graphs.void
setGraph(Graph<V,E> graph)
Set the graphvoid
setPathLimit(int pathLimit)
Limits the maximum number of edges in a cycle.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.jgrapht.alg.cycle.DirectedSimpleCycles
findSimpleCycles
-
-
-
-
Constructor Detail
-
HawickJamesSimpleCycles
public HawickJamesSimpleCycles()
Create a simple cycle finder with an unspecified graph.
-
HawickJamesSimpleCycles
public HawickJamesSimpleCycles(Graph<V,E> graph) throws IllegalArgumentException
Create a simple cycle finder for the specified graph.- Parameters:
graph
- the DirectedGraph in which to find cycles.- Throws:
IllegalArgumentException
- if the graph argument isnull
.
-
-
Method Detail
-
findSimpleCycles
public void findSimpleCycles(Consumer<List<V>> consumer) throws IllegalArgumentException
Find the simple cycles of the graph.- Specified by:
findSimpleCycles
in interfaceDirectedSimpleCycles<V,E>
- Parameters:
consumer
- Consumer that will be called with each cycle found.- Throws:
IllegalArgumentException
-
printSimpleCycles
public void printSimpleCycles()
Print to the standard output all simple cycles without building a list to keep them, thus avoiding high memory consumption when investigating large and much connected graphs.
-
countSimpleCycles
public long countSimpleCycles()
Count the number of simple cycles. It can count up to Long.MAX cycles in a graph.- Returns:
- the number of simple cycles
-
setPathLimit
public void setPathLimit(int pathLimit)
Limits the maximum number of edges in a cycle.- Parameters:
pathLimit
- maximum paths.
-
clearPathLimit
public void clearPathLimit()
This is the default behaviour of the algorithm. It will keep looking as long as there are paths available.
-
-