dfs /bfs의 약간 응용같아 보였다.
let graph = {
A: ["B", "C"],
B: ["A", "D", "E"],
C: ["A", "F"],
D: ["B", "G"],
E: ["B", "F"],
F: ["C", "E", "H"]
};
function shortCut(graph, start, end) {
let answer = [];
let path = [];
let queue = [];
path.push(start);
answer.push(start);
queue.push(start);
while (queue.length !== 0) {
let n = queue.shift();
if (!path.includes(graph[n])) {
if (graph[n].includes(end)) {
answer.push(n, end);
break;
}
queue.push(...graph[n]);
path.push(...graph[n])
}
}
return answer.length - 1;
}
console.log(shortCut(graph, "A", "H"));
const graph = {
A: ["B", "C"],
B: ["A", "D", "E"],
C: ["A", "F"],
D: ["B","G"],
E: ["B", "F"],
F: ["C", "E", "H"]
};
const start = "A";
const end = "G";
let queue = [start];
let visited = [start];
function solution() {
let count = -1;
while (queue.length !== 0) {
count += 1;
let size = queue.length;
for (let i = 0; i < size; i++) {
let node = queue.splice(0, 1);
console.log(count,node[0],end);
if (node[0] === end) {
return count;
}
for (let next_node in graph[node]) {
if (!visited.includes(graph[node][next_node])) {
visited.push(graph[node][next_node]);
queue.push(graph[node][next_node]);
}
}
}
}
}
let answer = solution();
(쩔수없이 매우 유사..)
const graph = {
A: ["B", "C"],
B: ["A", "D", "E"],
C: ["A", "F"],
D: ["B","G"],
E: ["B", "F"],
F: ["C", "E", "H"]
};
function shortCut(start,end){
let queue=[start];
let visited=[start];
let count = -1;
while( queue.length !== 0 ){
count += 1;
let lengthOfQ = queue.length;
for (let i=0; i<lengthOfQ; i++){
let n = queue.shift();
if(n === end){ return count }
for( let next in graph[n] ){
if(!visited.includes(next)){
queue.push(graph[n][next]);
visited.push(graph[n][next]);
}
}
}
}
}
console.log(shortCut("A","H"));