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, []);
}