Assignment 14 Graphs

by pat spag

HTML

Select two nodes:
<br />From
<select id="from">
<option value='A'>A</option>
<option value='B'>B</option>
<option value='C'>C</option>
<option value='D'>D</option>
<option value='E'>E</option>
<option value='F'>F</option>
<option value='G'>G</option>
</select>To
<select id="to">
<option value='A'>A</option>
<option value='B'>B</option>
<option value='C'>C</option>
<option value='D'>D</option>
<option value='E'>E</option>
<option value='F'>F</option>
<option value='G'>G</option>
</select>
<input type="button" onclick="calculate();" value="Calculate" />
<br/>
<br/><span id="output" />

JavaScript

function graph(){
	this.edges = {};
  
  
  this.addNode = function (letter){
  	this.edges[letter] = {};
  }
  
  this.addEdge = function (from, to, cost){
  	this.edges[from][to] = cost;
    this.edges[to][from] = cost;
  }
  
  this.calculatePaths = function(fromPath, toPath, pathCost, paths){
  	paths.push(fromPath);
    
    if(fromPath == toPath){
    	printPaths(paths, pathCost);
    }else{
    	for (var path in this.edges[fromPath]){
      	if(paths.indexOf(path) === -1){
        	var currentCost = this.edges[fromPath][path];
          this.calculatePaths(path,toPath, pathCost+ currentCost, paths)
        }
      }
    
    }
    paths.pop();
  }
 }
function printPaths(pathsToPrint, costToPrint){
  
  var valToPrint = pathsToPrint[0];
  for (var i = 1; i < pathsToPrint.length; i+=1){
    valToPrint = valToPrint + " - " + pathsToPrint[i];
  }
  valToPrint += "   || Cost: " + costToPrint;
  
  document.getElementById("output").innerHTML += valToPrint + "<br>";
  
}

function calculate() {
	document.getElementById("output").innerHTML = "";
  
  var fromOutput = document.getElementById("from").value;
	var toOutput = document.getElementById("to").value;
  
  
  var graph_AG = new graph();
  graph_AG.addNode('A');
	graph_AG.addNode('B');
	graph_AG.addNode('C');
	graph_AG.addNode('D');
	graph_AG.addNode('E');
	graph_AG.addNode('F');
	graph_AG.addNode('G');
  
  
  graph_AG.addEdge('A', 'B', 2);
	graph_AG.addEdge('A', 'C', 1);
	graph_AG.addEdge('B', 'D', 1);
	graph_AG.addEdge('B', 'G', 1);
	graph_AG.addEdge('C', 'D', 1);
	graph_AG.addEdge('C', 'E', 1);
	graph_AG.addEdge('D', 'E', 2);
	graph_AG.addEdge('D', 'F', 1);
	graph_AG.addEdge('D', 'G', 2);
  
  document.getElementById("output").innerHTML = fromOutput + " to " + toOutput + "<br>";
	graph_AG.calculatePaths(fromOutput, toOutput, 0, []);
  
  
}