Skip to content

Commit c12243c

Browse files
Merge pull request #240 from tpriyanshu90/master
BFS in java
2 parents ae09379 + f7559d5 commit c12243c

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

Graph Traversal/BFS/BFS.java

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.Set;
7+
8+
public class BFS{
9+
public static void main(String[] args){
10+
Graph G = new Graph();
11+
G.addEdge(1,2);
12+
G.addEdge(1,3);
13+
G.addEdge(1,4);
14+
G.addEdge(4,5);
15+
G.addEdge(4,6);
16+
G.addEdge(2,7);
17+
18+
List<Node> BFSresult = G.breadthFirstSearch(1); //1 is the root from where we start BFS
19+
20+
//printing the result
21+
for(Node nodes : BFSresult){
22+
System.out.println(nodes.getName());
23+
}
24+
}
25+
}
26+
27+
class Graph {
28+
private Map<Integer, Node> nodes = new HashMap<Integer, Node>();
29+
30+
public Graph() {}
31+
32+
public void addEdge(Integer nodeName1, Integer nodeName2) {
33+
Node node1 = nodes.get(nodeName1);
34+
if (node1 == null) {
35+
node1 = new Node(nodeName1);
36+
}
37+
38+
Node node2 = nodes.get(nodeName2);
39+
if (node2 == null) {
40+
node2 = new Node(nodeName2);
41+
}
42+
43+
node1.addNeighbor(node2);
44+
node2.addNeighbor(node1);
45+
46+
nodes.put(nodeName1, node1);
47+
nodes.put(nodeName2, node2);
48+
}
49+
50+
public List<Node> breadthFirstSearch(int rootName) {
51+
List<Node> result = new ArrayList<Node>();
52+
List<Node> temp = new ArrayList<Node>();
53+
Set<Integer> visited = new HashSet<Integer>();
54+
55+
Node root = nodes.get(rootName);
56+
temp.add(root);
57+
visited.add(rootName);
58+
59+
while (temp.size() > 0) {
60+
Node currentNode = temp.get(0);
61+
List<Node> neighbors = currentNode.getNeighbors();
62+
63+
for (int i = 0; i < neighbors.size(); i++) {
64+
Node neighbor = neighbors.get(i);
65+
// a node can only be visited once if it has more than one parents
66+
if (visited.contains(neighbor.getName())) {
67+
continue;
68+
} else {
69+
temp.add(neighbor);
70+
visited.add(neighbor.getName());
71+
}
72+
}
73+
74+
temp.remove(0);
75+
result.add(currentNode);
76+
}
77+
78+
return result;
79+
}
80+
}
81+
82+
class Node {
83+
Integer name;
84+
List<Node> neighbors = new ArrayList<Node>();
85+
86+
public Node(Integer name) {
87+
this.name = name;
88+
}
89+
90+
public Integer getName() {
91+
return this.name;
92+
}
93+
94+
public void addNeighbor(Node neighbor) {
95+
neighbors.add(neighbor);
96+
}
97+
98+
public List<Node> getNeighbors() {
99+
return neighbors;
100+
}
101+
}

0 commit comments

Comments
 (0)