1+ // src/13-graph/03-using-dfs.js
2+
3+ const Graph = require ( './graph' ) ;
4+ const { depthFirstSearch, enhancedDepthFirstSearch } = require ( './dfs' ) ;
5+
6+ const caveSystem = new Graph ( ) ;
7+
8+ const caves = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' ] ;
9+
10+ caves . forEach ( cave => caveSystem . addVertex ( cave ) ) ;
11+
12+
13+ caveSystem . addEdge ( 'A' , 'B' ) ;
14+ caveSystem . addEdge ( 'A' , 'C' ) ;
15+ caveSystem . addEdge ( 'A' , 'D' ) ;
16+ caveSystem . addEdge ( 'C' , 'D' ) ;
17+ caveSystem . addEdge ( 'C' , 'G' ) ;
18+ caveSystem . addEdge ( 'D' , 'G' ) ;
19+ caveSystem . addEdge ( 'D' , 'H' ) ;
20+ caveSystem . addEdge ( 'B' , 'E' ) ;
21+ caveSystem . addEdge ( 'B' , 'F' ) ;
22+ caveSystem . addEdge ( 'E' , 'I' ) ;
23+
24+ console . log ( '********* DFS - cave ***********' ) ;
25+ depthFirstSearch ( caveSystem , ( cave ) => console . log ( 'Visited cave:' , cave ) ) ;
26+
27+ // ********* DFS - cave ***********
28+ // Visited cave: A
29+ // Visited cave: B
30+ // Visited cave: E
31+ // Visited cave: I
32+ // Visited cave: F
33+ // Visited cave: C
34+ // Visited cave: D
35+ // Visited cave: G
36+ // Visited cave: H
37+
38+ console . log ( '********* Enhanced DFS - cave ***********' ) ;
39+ const result = enhancedDepthFirstSearch ( caveSystem ) ;
40+
41+ console . log ( result ) ;
42+
43+ console . log ( '********* Topological sort using DFS ***********' ) ;
44+
45+ const tasks = new Graph ( true ) ; // this is a directed graph
46+ [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ] . forEach ( task => tasks . addVertex ( task ) ) ;
47+ // add the arrows, task dependencies:
48+ tasks . addEdge ( 'A' , 'C' ) ;
49+ tasks . addEdge ( 'A' , 'D' ) ;
50+ tasks . addEdge ( 'B' , 'D' ) ;
51+ tasks . addEdge ( 'B' , 'E' ) ;
52+ tasks . addEdge ( 'C' , 'F' ) ;
53+ tasks . addEdge ( 'F' , 'E' ) ;
54+
55+ // DFS traversal
56+ const dfsTasks = enhancedDepthFirstSearch ( tasks ) ;
57+ console . log ( dfsTasks ) ;
58+ // {
59+ // discovery: { A: 1, B: 11, C: 2, D: 8, E: 4, F: 3 },
60+ // finished: { A: 10, B: 12, C: 7, D: 9, E: 5, F: 6 },
61+ // predecessors: { A: null, B: null, C: 'A', D: 'A', E: 'F', F: 'C' }
62+ // }
63+
64+ // sort tasks in decreasing order of finish time
65+ // dfsTasks.finished = { A: 10, B: 12, C: 7, D: 9, E: 5, F: 6 }
66+ const sortedTasks = Object . keys ( dfsTasks . finished ) . sort ( ( a , b ) => dfsTasks . finished [ b ] - dfsTasks . finished [ a ] ) ;
67+ console . log ( sortedTasks ) ;
68+ // [ 'B', 'A', 'D', 'C', 'F', 'E' ]
69+
70+ // to see the output of this file use the command: node src/13-graph/03-using-dfs.js
0 commit comments