Assignment 14 - Graph
by Mike Kerney
HTML
From Node:
<select id = 'from'>
<option value="A"> A
<option value="B"> B
<option value="C"> C
<option value="D"> D
<option value="E"> E
<option value="F"> F
<option value="G"> G
</select>
To Node:
<select id = 'to'>
<option value="A"> A
<option value="B"> B
<option value="C"> C
<option value="D"> D
<option value="E"> E
<option value="F"> F
<option value="G"> G
</select>
<input type=button onclick = "Calculate()" value="Calculate">
<br/>
<br/>
Results
<br/>
<br/>
<div id = "output">
</div>
<br/>
<div id="output2">
</div>
JavaScript
function Graph() {
this.edges = [];
}
Graph.prototype.addNode = function (name) {
this.edges[name] = [];
}
Graph.prototype.addEdge = function (_from, _to, _cost) {
this.edges[_from][_to] = _cost;
this.edges[_to][_from] = _cost;
}
Graph.prototype.calculate = function (_from, _to, _cost, edges) {
edges.push (_from)
if (_from == _to) {
Result(edges, _cost);
}
else {
for (var between in this.edges[_from]) {
if (edges.indexOf(between)<0) {
var cost = this.edges[_from][between];
this.calculate(between, _to, _cost + cost, edges);
}
}
}edges.pop();
}
function Result(edges, _cost) {
var result;
var node = edges[0];
for (var i = 1; i < edges.length; i++) {
node = node + '-' + edges[i];
}
result = node + ': ' + _cost;
document.getElementById("output2").innerHTML += result + '<br>';
}
function Calculate () {
var _from = document.getElementById('from').value;
var _to = document.getElementById('to').value;
document.getElementById("output").innerHTML = '';
var graph = new Graph();
graph.addNode('A');
graph.addNode('B');
graph.addNode('C');
graph.addNode('D');
graph.addNode('E');
graph.addNode('F');
graph.addNode('G');
graph.addEdge('A', 'B', 2);
graph.addEdge('A', 'C', 1);
graph.addEdge('B', 'D', 1);
graph.addEdge('B', 'G', 1);
graph.addEdge('C', 'D', 1);
graph.addEdge('C', 'E', 1);
graph.addEdge('D', 'E', 2);
graph.addEdge('D', 'F', 1);
graph.addEdge('D', 'G', 2);
document.getElementById("output").innerHTML += _from + " to " + _to + ":";
graph.calculate(_from, _to, 0, []);
}