File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number } n
3
+ * @param {number[][] } edges
4
+ * @param {number[][] } query
5
+ * @return {number[] }
6
+ */
7
+ const closestNode = function ( n , edges , query ) {
8
+ const g = new Map ( )
9
+ for ( const [ p , q ] of edges ) {
10
+ if ( ! g . has ( p ) ) g . set ( p , new Set ( ) )
11
+ if ( ! g . has ( q ) ) g . set ( q , new Set ( ) )
12
+ g . get ( p ) . add ( q )
13
+ g . get ( q ) . add ( p )
14
+ }
15
+ const dist = Array . from ( { length : n } , ( ) => Array ( n ) . fill ( null ) )
16
+ for ( let i = 0 ; i < n ; i ++ ) dfs ( i , i , 0 )
17
+ const res = [ ]
18
+ // console.log(dist)
19
+ for ( const [ s , e , t ] of query ) {
20
+ let tmp = Infinity , cur = s , el
21
+ while ( true ) {
22
+ if ( dist [ cur ] [ t ] < tmp ) {
23
+ tmp = dist [ cur ] [ t ]
24
+ el = cur
25
+ }
26
+ if ( cur === e ) break
27
+ for ( const nxt of ( g . get ( cur ) || [ ] ) ) {
28
+ if ( dist [ cur ] [ e ] === dist [ nxt ] [ e ] + 1 ) {
29
+ cur = nxt
30
+ break
31
+ }
32
+ }
33
+ }
34
+ res . push ( el )
35
+ }
36
+
37
+ return res
38
+
39
+ function dfs ( root , node , d ) {
40
+ dist [ root ] [ node ] = d
41
+ for ( const nxt of ( g . get ( node ) || [ ] ) ) {
42
+ if ( nxt !== root && dist [ root ] [ nxt ] == null ) {
43
+ dfs ( root , nxt , d + 1 )
44
+ }
45
+ }
46
+ }
47
+ } ;
48
+
49
+ // another
50
+
51
+
1
52
/**
2
53
* @param {number } n
3
54
* @param {number[][] } edges
You can’t perform that action at this time.
0 commit comments