Graphs

Assignment 14

by Jake Jernigan

HTML

<br/> Select two nodes:
<br />From
<select id="from"></select>
To
<select id="to"></select>
<input type="button" onclick="calculate();" value="Calculate" />
<br/>
<p id="paths"></p>
<br/>
<p id="nodes"></p>
<br/>
<p id="edges"></p>

JavaScript

var Graph = function() {

    this.edges = {};
    this.paths = [];

    this.addNode = function(_name) {
        this.edges[_name] = {};
    }

    this.addEdge = function(_from, _to, _cost) {
        this.edges[_from][_to] = _cost;
        this.edges[_to][_from] = _cost;
    }
    
    this.printNodes = function() {
        var s = "All Nodes in Graph: <br/><br/>";
        var i = 1;
        for (var node in this.edges) {
            s = s + "Node: " + i + " Name: " + node + "</br>";
            i++;
        }
        return s;
    }

    this.calculatePaths = function(_from, _to, _cost, _paths) {
        this.paths.push(_from);
        if (_from == _to) { 
            this.printPaths(_paths, _cost);
        }
        else {
            for (var neighbor in this.edges[_from]) {
                if (this.paths.includes(neighbor) == false) {
                    var runningCost = this.edges[_from][neighbor];
                    var totalCost = _cost + runningCost;
                    this.calculatePaths(neighbor, _to, totalCost, _paths);
                }
            }
        }
        this.paths.pop();
    }

    this.printPaths = function(_paths, _cost) {
        var str = this.paths[0];
        for (var i = 1; i < this.paths.length; i++) {
            str = str + ", " + this.paths[i];
        }
        str += ": " + _cost + "<br />";
        document.getElementById("paths").innerHTML += str;
    }
}

var graph = new Graph(); // Global

function createGraph() {
    graph.addNode("A");
    addNodeToCombo("A");
    graph.addNode("B");
    addNodeToCombo("B");
    graph.addNode("C");
    addNodeToCombo("C");
    graph.addNode("D");
    addNodeToCombo("D");
    graph.addNode("E");
    addNodeToCombo("E");
    graph.addNode("F");
    addNodeToCombo("F");
    graph.addNode("G");
    addNodeToCombo("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);
   ...