너비우선정렬,
오밤중에 하다보니 제정신이 아니라 문제적코드를 작성했다.
문제점은, E를 기준으로 value 배열의 길이가 2개인지라,
그 두개에 대해서만 실행이 되며, F,C,B에 더 많은 그래프가 생겨나면 쓸 수 없는 코드다. 다시만들어야겠다.
let graph = {
E: ["D", "A"],
F: ["D"],
A: ["E", "C", "B"],
B: ["A"],
C: ["A"],
D: ["E", "F"]
};
let stack = [];
let queue = [];
function wideSearch(graph, start) {
stack.push(start);
for (let i = 0; i < graph[start].length; i++) {
queue.push(graph[start][i]);
}
let tempLen = queue.length;
for (let i = 0; i < tempLen; i++) {
graph[queue[i]].forEach(e => (!stack.includes(e) ? queue.push(e) : null));
}
for (let i of queue) {
stack.push(i);
}
return stack;
}
console.log(wideSearch(graph, "E"));
let graph = {
E: ["D", "A"],
F: ["D", "H"],
A: ["E", "C", "B"],
B: ["A", "N"],
C: ["A", "I"],
D: ["E", "F", "G"],
N: ["O"],
H: ["L"]
};
let stack = [];
let queue = [];
function wideSearch(graph, start) {
stack.push(start);
queue = graph[start];
while (queue.length > 0) {
if(graph[queue[0]]){
graph[queue[0]].forEach(e => (!stack.includes(e) ? queue.push(e) : null));
}
stack.push(queue.shift());
}
}
wideSearch(graph, "E");
console.log(stack)
while (queue.length > 0) {
if(graph[queue[0]]){
for(let i of graph[queue[0]]){
if(!stack.includes(i)){
queue.push(i)
}
}
}
정말 깔꿈하다
const graph = {
'A': ['E', 'C', 'B'],
'B': ['A'],
'C': ['A'],
'D': ['E','F'],
'E': ['D', 'A'],
'F': ['D'],
};
function bfs(graph, start){
let visited = [];
let queue = [start];
while (queue.length !== 0){
let n = queue.shift();
if (!visited.includes(n)){
visited.push(n);
let sub = graph[n].filter(x => !visited.includes(x));
for(let i of sub){
queue.push(i);
}
}
}
return visited;
}
console.log(bfs(graph, 'E'));```