39 lines
713 B
JavaScript
39 lines
713 B
JavaScript
const breadthFirstSearch = (graph, start, end) => {
|
|
const queue = graph[start];
|
|
const checked = [];
|
|
|
|
let lastLevelElement = queue[queue.length - 1];
|
|
let level = 1;
|
|
|
|
|
|
while (queue.length) {
|
|
const candidate = queue.shift();
|
|
|
|
if (candidate === end) {
|
|
return level;
|
|
}
|
|
|
|
if (checked.includes(candidate)) {
|
|
continue;
|
|
}
|
|
|
|
queue.push(...(graph[candidate] || []));
|
|
if (candidate === lastLevelElement) {
|
|
lastLevelElement = queue[queue.length - 1];
|
|
level += 1;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
const graph = {
|
|
a: ['b', 'c', 'd'],
|
|
b: ['e', 'f'],
|
|
d: ['e', 'g'],
|
|
c: ['j', 'k'],
|
|
e: ['l']
|
|
}
|
|
|
|
const res = breadthFirstSearch(graph, 'a', 'l');
|
|
console.log('res', res); |