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