-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBFS.java
More file actions
86 lines (72 loc) · 2.15 KB
/
Copy pathBFS.java
File metadata and controls
86 lines (72 loc) · 2.15 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package Graph;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.List;
import java.util.Queue;
/*
* Problem Statement:
* Breadth first search in a graph, iterative and recursive manner
*
* Link:
* http://www.techiedelight.com/breadth-first-search/
*/
public class BFS {
private static void BFSReccursive(Graph graph, boolean visited[], Queue<Integer> queue) {
if (queue.isEmpty()) {
return;
}
int current = queue.poll();
System.out.print(" " + current);
for (Edge edge : graph.adjacencyList.get(current)) {
int neighbour = edge.destination;
if (!visited[neighbour]) {
queue.add(neighbour);
visited[neighbour] = true;
}
}
BFSReccursive(graph, visited, queue);
}
private static void BFSIterative(Graph graph, int source, boolean visited[]) {
Queue<Integer> queue = new ArrayDeque<>();
queue.add(source);
visited[source] = true;
while (!queue.isEmpty()) {
int current = queue.poll();
System.out.print(" " + current);
for (Edge edge : graph.adjacencyList.get(current)) {
int neighbour = edge.destination;
if (!visited[neighbour]) {
queue.add(neighbour);
visited[neighbour] = true;
}
}
}
}
public static void main(String[] args) {
List<Edge> edges = Arrays.asList(
new Edge(1, 2), new Edge(1, 3), new Edge(1, 4),
new Edge(2, 5), new Edge(2, 6), new Edge(5, 9),
new Edge(5, 10), new Edge(4, 7), new Edge(4, 8),
new Edge(7, 11), new Edge(7, 12)
);
final int N = 15;
Graph graph = new Graph(edges, N);
System.out.print("\nBFS (iterative manner): ");
boolean visited[] = new boolean[graph.numVertices];
for (int i = 0; i < N; ++i) {
if (!visited[i]) {
BFSIterative(graph, i, visited);
}
}
Arrays.fill(visited, false);
Queue<Integer> queue = new ArrayDeque<>();
System.out.print("\nBFS (recursive manner): ");
for (int i = 0; i < N; ++i) {
if (!visited[i]) {
queue.add(i);
visited[i] = true;
BFSReccursive(graph, visited, queue);
}
}
}
}