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