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'));