@@ -191,6 +191,121 @@ function findComponents() {
191
191
192
192
console . log ( "Find components: " , findComponents ( ) ) ;
193
193
194
+ function DFSPractice ( s ) {
195
+ let visited = new Array ( newGraph . vertices ) . fill ( false ) ;
196
+ let components = [ ] ;
197
+ let count = 0 ;
198
+
199
+ for ( let i = 0 ; i < visited . length ; i ++ ) {
200
+ if ( ! visited [ i ] ) {
201
+ count ++ ;
202
+ visit ( i ) ;
203
+ }
204
+ }
205
+
206
+ function visit ( at ) {
207
+ visited [ at ] = true ;
208
+ components [ at ] = count ;
209
+
210
+ let neighbors = newGraph . edges [ at ] ;
211
+ let curr = neighbors . head ;
212
+ while ( curr ) {
213
+ if ( ! visited [ curr . data ] ) {
214
+ visit ( curr . data ) ;
215
+ }
216
+ curr = curr . next ;
217
+ }
218
+ }
219
+
220
+ return components ;
221
+ }
222
+
223
+ console . log ( "DFS Practice: " , DFSPractice ( 0 ) ) ;
224
+
225
+ function BFSPractice ( s , e ) {
226
+ let prev = solvePractice ( s ) ;
227
+ return reconstructPathPractice ( s , e , prev ) ;
228
+ }
229
+
230
+ function solvePractice ( s ) {
231
+ let visited = new Array ( newGraph . vertices ) . fill ( false ) ;
232
+ let prev = new Array ( newGraph . vertices ) . fill ( null ) ;
233
+
234
+ let queue = [ ] ;
235
+ queue . push ( s ) ;
236
+ visited [ s ] = true ;
237
+
238
+ while ( queue . length ) {
239
+ let node = queue . shift ( ) ;
240
+ let neighbors = newGraph . edges [ node ] ;
241
+
242
+ let curr = neighbors . head ;
243
+ while ( curr ) {
244
+ if ( ! visited [ curr . data ] ) {
245
+ if ( ! queue . includes ( curr . data ) ) {
246
+ queue . push ( curr . data ) ;
247
+ }
248
+ visited [ curr . data ] = true ;
249
+ prev [ curr . data ] = node ;
250
+ }
251
+ curr = curr . next ;
252
+ }
253
+ }
254
+ console . log ( "BFS practice prev: " , prev ) ;
255
+ return prev ;
256
+ }
257
+
258
+ function reconstructPathPractice ( s , e , prev ) {
259
+ let path = [ ] ;
260
+ for ( i = e ; i !== null ; i = prev [ i ] ) {
261
+ path . push ( i ) ;
262
+ }
263
+ path . reverse ( ) ;
264
+ return path [ 0 ] === s ? path : [ ] ;
265
+ }
266
+
267
+ console . log ( "Shortest path from 3 -> 12: " , BFSPractice ( 3 , 12 ) ) ;
268
+
269
+ function findConnectedComponentBFS ( ) {
270
+ let components = [ ] ;
271
+ let visited = new Array ( newGraph . vertices ) . fill ( false ) ;
272
+ let count = 0 ;
273
+
274
+ for ( let i = 0 ; i < visited . length ; i ++ ) {
275
+ if ( ! visited [ i ] ) {
276
+ count ++ ;
277
+ bfs ( i ) ;
278
+ }
279
+ }
280
+
281
+ function bfs ( at ) {
282
+ let q = [ ] ;
283
+ q . push ( at ) ;
284
+ visited [ at ] = true ;
285
+ components [ at ] = count ;
286
+
287
+ while ( q . length ) {
288
+ let node = q . shift ( ) ;
289
+ let neighbors = newGraph . edges [ node ] ;
290
+ let curr = neighbors . head ;
291
+
292
+ while ( curr ) {
293
+ if ( ! visited [ curr . data ] ) {
294
+ if ( ! q . includes ( curr . data ) ) {
295
+ q . push ( curr . data ) ;
296
+ }
297
+ visited [ curr . data ] = true ;
298
+ components [ curr . data ] = count ;
299
+ }
300
+ curr = curr . next ;
301
+ }
302
+ }
303
+ }
304
+
305
+ return components ;
306
+ }
307
+
308
+ console . log ( "Connected Components BFS: " , findConnectedComponentBFS ( ) ) ;
194
309
// function solvePractice(s) {
195
310
// let queue = []; // Initialize the queue
196
311
// queue.push(s); // enqueue node S for first visiting
0 commit comments