JSFiddle - React, Tailwind, and code Playground

by Jenni Meiklejohn

HTML

<h1>Finding the Ways</h1>
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' selected>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' selected>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="masterCalc();" value="Calculate" />
<br/>
<br/><span id="result"/>

JavaScript

function Graph() {
        this.edges = {};

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

        this.addEdge = function (from, to, cost) {
            this.edges[from][to] = cost;
            this.edges[to][from] = cost;
        };

        this.calculatePaths = function (from, to, cost, paths) {
            // implement - this is designed for a recursive call
            // also if path is defined well - it will contain cost.
            paths.push(from);

            if(from == to){
                this.displayPath(paths.join(" "), cost)
            }
            for (var edge in this.edges[from]){
                if(paths.indexOf(edge) < 0){
                    console.log(edge);
                    var temp = cost+this.edges[from][edge];
                    this.calculatePaths(edge, to, temp, paths.slice());
                }
            }
        };

        this.displayPath = function (path, cost) {
            document.getElementById('result').innerHTML += path + ' -:- ' + cost + '<br/>';

        }

    }

    function masterCalc() {
        var from = document.getElementById('from').value;
        var to = document.getElementById('to').value;

        document.getElementById('result').innerHTML = '';

        // Create Graph and calculate cost of all paths
        var g = new Graph();

        g.addNode('A');
        g.addNode('B');
        g.addNode('C');
        g.addNode('D');
        g.addNode('E');
        g.addNode('F');
        g.addNode('G');

        g.addEdge('A', 'B', 2);
        g.addEdge('A', 'C', 1);
        g.addEdge('B', 'D', 1);
        g.addEdge('B', 'G', 1);
        g.addEdge('C', 'D', 1);
        g.addEdge('C', 'E', 1);
        g.addEdge('D', 'E', 2);
        g.addEdge('D', 'F', 1);
        g.addEdge('D', 'G', 2);

        g.calculatePaths(from, to, 0, []);
    }