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