JSFiddle - React, Tailwind, and code Playground
by Eugene Vilder
JavaScript
class Graph {
constructor(){
this.nodes = {};
}
addNode(node){
this.nodes[node] = [];
}
addEdge(source, destination){
if (!this.nodes[source] || !this.nodes[destination]) {
return false;
}
if (!this.nodes[source].includes(destination)) {
this.nodes[source].push(destination);
}
if (!this.nodes[destination].includes(source)) {
this.nodes[destination].push(source);
}
}
showNodes(){
console.log(this.nodes);
}
bfs(source, destination){
const queue = [source];
const visited = {};
while(queue.length){
const current = queue.shift();
if (visited[current]) {
continue;
}
if (current === destination) {
return true;
} else {
visited[current] = true;
this.nodes[current].forEach((node)=>{
queue.push(node);
});
}
}
return false;
}
}
const g = new Graph();
g.addNode('Vova');
g.addNode('Tim');
g.addNode('John');
g.addNode('Ann');
g.addNode('Lee');
g.addNode('Ron');
g.addNode('Jeff');
g.addEdge('Tim', 'Vova');
g.addEdge('Tim', 'Ann');
g.addEdge('Tim', 'Lee');
g.addEdge('Ann', 'John');
g.addEdge('Ann', 'Lee');
g.addEdge('Ron', 'Lee');
g.addEdge('Ron', 'Jeff');
g.showNodes();
console.log(g.bfs('Tim', 'Jeff'));