@@ -21,40 +21,40 @@ private CycleDetection() { }
21
21
* @param graph Graph
22
22
* @return true if a cycle exists
23
23
*/
24
- public static boolean detect (Graph <Integer > graph ) {
24
+ public static < T extends Comparable < T >> boolean detect (Graph <T > graph ) {
25
25
if (graph == null )
26
26
throw new IllegalArgumentException ("Graph is NULL." );
27
27
28
28
if (graph .getType () != Graph .TYPE .UNDIRECTED )
29
29
throw new IllegalArgumentException ("Graph is needs to be Undirected." );
30
30
31
- final Set <Graph .Vertex <Integer >> visitedVerticies = new HashSet <Graph .Vertex <Integer >>();
32
- final Set <Graph .Edge <Integer >> visitedEdges = new HashSet <Graph .Edge <Integer >>();
31
+ final Set <Graph .Vertex <T >> visitedVerticies = new HashSet <Graph .Vertex <T >>();
32
+ final Set <Graph .Edge <T >> visitedEdges = new HashSet <Graph .Edge <T >>();
33
33
34
- final List <Graph .Vertex <Integer >> verticies = graph .getVertices ();
34
+ final List <Graph .Vertex <T >> verticies = graph .getVertices ();
35
35
if (verticies == null || verticies .size () == 0 )
36
36
return false ;
37
37
38
38
// Select the zero-ith element as the root
39
- final Graph .Vertex <Integer > root = verticies .get (0 );
39
+ final Graph .Vertex <T > root = verticies .get (0 );
40
40
return depthFirstSearch (root , visitedVerticies , visitedEdges );
41
41
}
42
42
43
- private static final boolean depthFirstSearch (Graph .Vertex <Integer > vertex , Set <Graph .Vertex <Integer >> visitedVerticies , Set <Graph .Edge <Integer >> visitedEdges ) {
43
+ private static final < T extends Comparable < T >> boolean depthFirstSearch (Graph .Vertex <T > vertex , Set <Graph .Vertex <T >> visitedVerticies , Set <Graph .Edge <T >> visitedEdges ) {
44
44
if (!visitedVerticies .contains (vertex )) {
45
45
// Found an unvisited, add to the set
46
46
visitedVerticies .add (vertex );
47
47
48
- final List <Graph .Edge <Integer >> edges = vertex .getEdges ();
48
+ final List <Graph .Edge <T >> edges = vertex .getEdges ();
49
49
if (edges != null ) {
50
50
// Follow each unvisited edge, visit the vertex the edge connects to.
51
- for (Graph .Edge <Integer > edge : edges ) {
52
- final Graph .Vertex <Integer > to = edge .getToVertex ();
51
+ for (Graph .Edge <T > edge : edges ) {
52
+ final Graph .Vertex <T > to = edge .getToVertex ();
53
53
boolean result = false ;
54
54
if (to != null && !visitedEdges .contains (edge )) {
55
55
visitedEdges .add (edge );
56
56
57
- final Graph .Edge <Integer > recip = new Graph .Edge <Integer >(edge .getCost (), edge .getToVertex (), edge .getFromVertex ());
57
+ final Graph .Edge <T > recip = new Graph .Edge <T >(edge .getCost (), edge .getToVertex (), edge .getFromVertex ());
58
58
visitedEdges .add (recip );
59
59
60
60
result = depthFirstSearch (to , visitedVerticies , visitedEdges );
0 commit comments