public class DirectedCycle extends Object
DirectedCycle class represents a data type for
determining whether a digraph has a directed cycle.
The hasCycle operation determines whether the digraph has
a simple directed cycle and, if so, the cycle operation
returns one.
This implementation uses depth-first search. The constructor takes Θ(V + E) time in the worst case, where V is the number of vertices and E is the number of edges. Each instance method takes Θ(1) time. It uses Θ(V) extra space (not including the digraph).
See Topological to compute a topological order if the
digraph is acyclic.
For additional documentation, see Section 4.2 of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.
| Constructor and Description |
|---|
DirectedCycle(Digraph G)
Determines whether the digraph
G has a directed cycle and, if so,
finds such a cycle. |
| Modifier and Type | Method and Description |
|---|---|
Iterable<Integer> |
cycle()
Returns a directed cycle if the digraph has a directed cycle, and
null otherwise. |
boolean |
hasCycle()
Does the digraph have a directed cycle?
|
static void |
main(String[] args)
Unit tests the
DirectedCycle data type. |
public DirectedCycle(Digraph G)
G has a directed cycle and, if so,
finds such a cycle.G - the digraphpublic boolean hasCycle()
true if the digraph has a directed cycle, false otherwisepublic Iterable<Integer> cycle()
null otherwise.null otherwisepublic static void main(String[] args)
DirectedCycle data type.args - the command-line arguments