JSFiddle - React, Tailwind, and code Playground

by Bhavin Surela

JavaScript

input1 = [{to:"SFO",from:"JFK"},{to:"PER",from:"SYD"},{to:"SYD",from:"SFO"},{to:"JFK",from:"LHR"}];
input2 = [{to:"SFO",from:"JFK"},{to:"PER",from:"SYD"},{to:"SYD",from:"SFO"},{to:"JFK",from:"LHR"},{to:"HKG",from:"SNG"},{to:"SNG",from:"HND"}];
input3 = [{to:"SFO",from:"JFK"},{to:"PER",from:"SYD"},{to:"SYD",from:"SFO"},{to:"JFK",from:"LHR"},{to:"JFK",from:"LAX"},{to:"LAX",from:"SFO"},{to:"HKG",from:"SNG"},{to:"SNG",from:"HND"}];

function findPaths(input){
	var startingSet={};
  var nodes={};
  var outputs = [];
  for(let i =0;i<input.length;i++){
  	let to = input[i].to;
    let from = input[i].from;
    
    nodes[to] = from;
  	if(startingSet[to] !== false){
    	startingSet[to] = true;
    }
    startingSet[from] = false;
  }
    
  for (const startingPoint in startingSet) {
  	if(startingSet[startingPoint] === true){
  		let output = traverse(nodes, startingPoint,[]);
   		 outputs.push(output);
  	}
  }
  
  
  console.log(outputs);
 	for(let i =0;i<outputs.length;i++){
  	printOutput(outputs[i]);
  }
  
}
function traverse(nodes, startingPoint, output){
	let from = nodes[startingPoint];
  if(!from)
  	return output;
    
  output.push({to:startingPoint,from:from});
  return traverse(nodes, from, output);
}

/// LETS account for cycle

function findPathsWithCycle(input){
	var startingSet={};
  var nodes={};
  var outputs = [[]];
  for(let i =0;i<input.length;i++){
  	let to = input[i].to;
    let from = input[i].from;
    
    if(nodes[to]){
    	nodes[to].push(from);
    }else{
    	nodes[to] = [from];
    }
    
  	if(startingSet[to] !== false){
    	startingSet[to] = true;
    }
    startingSet[from] = false;
  }
 
  for (const startingPoint in startingSet) {
  	if(startingSet[startingPoint] === true){
  		traverseCycle(nodes, startingPoint,{},outputs,0);
  	}
  }
 	
  console.log(outputs);
  for(let i =0;i<outputs.length;i++){
  	//printOutput(outputs[i]);
  }
  
}
function traverseCycle(nodes, startingPoint, visitedSet,outputs,i){
	let from =...