1
const RED = "red";
2
const BLUE = "blue";
3

4
function mapAllEdges(edges) {
5
const map = new Map();
6
for (let edge of edges) {
7
if (!map.has(edge[0])) {
8
map.set(edge[0], []);
9
}
10
map.get(edge[0]).push(edge[1]);
11
}
12
return map;
13
}
14

15
function bfs(color, redNodeMap, blueNodeMap, result) {
16
const queue = [0];
17
let length = 0;
18
let currentColor = color;
19
while (queue.length > 0) {
20
const size = queue.length;
21
for (let i = 0; i < size; i++) {
22
const node = queue.shift();
23
if (result[node] === -1 || length < result[node]) {
24
result[node] = length;
25
}
26
const map = RED === currentColor ? redNodeMap : blueNodeMap;
27
if (map.has(node)) {
28
const edges = map.get(node);
29
map.delete(node);
30
queue.push(...edges);
31
}
32
}
33
length++;
34
currentColor = RED === currentColor ? BLUE : RED;
35
}
36
return result;
37
}
38

39
function shortestPath(redEdges, blueEdges, color, result) {
40
const redNodeMap = mapAllEdges(redEdges);
41
const blueNodeMap = mapAllEdges(blueEdges);
42
bfs(color, redNodeMap, blueNodeMap, result);
43
}
44

45
/**
46
* @param {number} n
47
* @param {number[][]} redEdges
48
* @param {number[][]} blueEdges
49
* @return {number[]}
50
*/
51
var shortestAlternatingPaths = function (n, redEdges, blueEdges) {
52
const result = new Array(n).fill(-1);
53
shortestPath(redEdges, blueEdges, RED, result);
54
shortestPath(redEdges, blueEdges, BLUE, result);
55
return result;
56
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0