@@ -154,7 +154,7 @@ public boolean bfs(String src, String dest) {
154
154
if (processed .containsKey (removePair .vname )) {
155
155
continue ;
156
156
}
157
-
157
+
158
158
processed .put (removePair .vname , true );
159
159
160
160
// check direct edge
@@ -165,7 +165,7 @@ public boolean bfs(String src, String dest) {
165
165
166
166
// devote work to neighbors
167
167
168
- Vertex removePairVertex = this .vertices .get (removePair .vname );
168
+ Vertex removePairVertex = this .vertices .get (removePair .vname ); // address
169
169
// all neighbors of removedPair vertex
170
170
ArrayList <String > removePairNbrs = new ArrayList <>(removePairVertex .nbrs .keySet ());
171
171
@@ -188,4 +188,66 @@ public boolean bfs(String src, String dest) {
188
188
return false ;
189
189
}
190
190
191
+ // Depth First Search implementation
192
+ // it first explores all neighbors & then only it's siblings
193
+
194
+ public boolean dfs (String src , String dest ) {
195
+
196
+ HashMap <String , Boolean > processed = new HashMap <>();
197
+
198
+ // use addLast() and removeFirst() of LinkedList - O(1) Time operations
199
+ LinkedList <Pair > stack = new LinkedList <>(); // Queue using LinkedList
200
+
201
+ // create a new Pair
202
+ Pair srcPair = new Pair ();
203
+ srcPair .vname = src ;
204
+ srcPair .pathSoFar = src ;
205
+
206
+ // put the new pair in queue
207
+ stack .addFirst (srcPair );
208
+
209
+ // while queue is not empty keep on doing the work
210
+ while (!stack .isEmpty ()) {
211
+
212
+ // remove a pair from the queue
213
+ Pair removePair = stack .removeFirst ();
214
+
215
+ // check if that vertex is already processed
216
+ if (processed .containsKey (removePair .vname )) {
217
+ continue ;
218
+ }
219
+
220
+ processed .put (removePair .vname , true );
221
+
222
+ // check direct edge
223
+ if (this .containsEdge (removePair .vname , dest )) {
224
+ System .out .println (removePair .pathSoFar + dest );
225
+ return true ;
226
+ }
227
+
228
+ // devote work to neighbors
229
+
230
+ Vertex removePairVertex = this .vertices .get (removePair .vname ); // address
231
+ // all neighbors of removedPair vertex
232
+ ArrayList <String > removePairNbrs = new ArrayList <>(removePairVertex .nbrs .keySet ());
233
+
234
+ // loop on neighbors
235
+ for (String nbr : removePairNbrs ) {
236
+
237
+ // process only unprocessed neighbors
238
+ if (!processed .containsKey (nbr )) {
239
+
240
+ // make a new pair of neighbor & put it in Queue
241
+ Pair newPair = new Pair ();
242
+ newPair .vname = nbr ;
243
+ newPair .pathSoFar = removePair .pathSoFar + nbr ;
244
+
245
+ stack .addFirst (newPair );
246
+ }
247
+ }
248
+ }
249
+
250
+ return false ;
251
+ }
252
+
191
253
}
0 commit comments