@@ -191,6 +191,121 @@ function findComponents() {
191191
192192console . log ( "Find components: " , findComponents ( ) ) ;
193193
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 ( ) ) ;
194309// function solvePractice(s) {
195310// let queue = []; // Initialize the queue
196311// queue.push(s); // enqueue node S for first visiting
0 commit comments