- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDFSRecursive.java
More file actions
Latest commit
66 lines (50 loc) · 1.41 KB
/
Copy pathDFSRecursive.java
File metadata and controls
66 lines (50 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
packagegraph;
importjava.util.*;
/*
Algorithm: No container for Recursive way
1. Create an array of linkedList for all the vertices and boolean array to track visited vertices.
2. Each linkedList will track the adjacent vertices.
3. Mark the current node as visited and print it.
4. Retrieve the the adj vertex from the list and check if its visited or not.
5. If not then recursively call the method on that vertex.
*/
publicclassDFSRecursive {
privateintvertices;
privateLinkedList<Integer>[] adj;
@SuppressWarnings("unchecked")
publicDFSRecursive(intv) {
vertices = v;
adj = newLinkedList[v];
for (inti = 0; i < v; ++i)
adj[i] = newLinkedList<>();
}
// Adding the adjacent vertices to the linkedList
voidaddEdge(intv, intadjv) {
adj[v].add(adjv);
}
voidDFS(intv) {
booleanvisited[] = newboolean[vertices];
DFSUtil(v, visited);
}
voidDFSUtil(intv, booleanvisited[]) {
visited[v] = true;
System.out.print(v + " ");
Iterator<Integer> i = adj[v].listIterator();
while (i.hasNext()) {
intn = i.next();
if (!visited[n])
DFSUtil(n, visited);
}
}
publicstaticvoidmain(Stringargs[]) {
DFSRecursiveg = newDFSRecursive(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("Following is Depth First Traversal " + "(starting from vertex 2)");
g.DFS(2);
}
}