File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[][] } times
3
+ * @param {number } n
4
+ * @param {number } k
5
+ * @return {number }
6
+ */
7
+ var networkDelayTime = function ( times , n , k ) {
8
+
9
+ let time_taken = 0 ;
10
+ const visited_set = new Set ( ) ;
11
+ const min_heap = new MinPriorityQueue ( ) ;
12
+ const node_edge_cost = new Map ( ) ;
13
+
14
+ for ( const [ node , edge , cost ] of times ) {
15
+ let edges = [ ] ;
16
+ if ( node_edge_cost . has ( node ) ) {
17
+ edges = node_edge_cost . get ( node ) ;
18
+ }
19
+ edges . push ( [ edge , cost ] ) ;
20
+ node_edge_cost . set ( node , edges ) ;
21
+ }
22
+
23
+ min_heap . enqueue ( [ k , 0 ] , 0 ) ;
24
+
25
+ while ( min_heap . size ( ) ) {
26
+
27
+ const [ node , cost ] = min_heap . dequeue ( ) . element ;
28
+
29
+ if ( visited_set . has ( node ) ) continue ;
30
+ visited_set . add ( node ) ;
31
+
32
+ time_taken = Math . max ( cost , time_taken ) ;
33
+
34
+ const node_edges = node_edge_cost . get ( node ) || [ ] ;
35
+
36
+ for ( const [ edge_node , edge_cost ] of node_edges ) {
37
+ if ( ! visited_set . has ( edge_node ) ) {
38
+ min_heap . enqueue ( [ edge_node , edge_cost + cost ] , edge_cost + cost ) ;
39
+ }
40
+ }
41
+ }
42
+
43
+ return visited_set . size === n ? time_taken : - 1 ;
44
+ } ;
You can’t perform that action at this time.
0 commit comments