JSFiddle - React, Tailwind, and code Playground

HTML

<canvas width="640" height="320"></canvas>

CSS

canvas {
    border: 1px solid #000000;
}

JavaScript

Graph.prototype.addEdge = function (from, to, distance) {
    this.vertices[from][this.v - to] = distance;
    return this;
};

Graph.prototype.getEdge = function (a, b) {
    if (b < a) {
        var t = a;
        a = b;
        b = t;
    }

    return this.vertices[a][this.v - b];
};

Graph.prototype.shortest = function () {
    var v = this.v;
    var w = v + 1;
    var distance = [0];
    var unvisited = [0];
    var graph = new Graph(w);
    var previous = new Array(w);

    for (var i = 0; i < v;) {
        distance.push(Infinity);
        unvisited.push(++i);
    }

    while (unvisited.length) {
        var undetermined = [];
        var length = unvisited.length;
        for (var i = 0; i < length; i++)
            undetermined.push(distance[unvisited[i]]);
        var determined = Math.min.apply(Math, undetermined);
        if (determined === Infinity) break;
        var current = distance.indexOf(determined);
        var index = unvisited.indexOf(current);
        unvisited.splice(index, 1);

        for (var i = 0; i < w; i++) {
            if (unvisited.indexOf(i) < 0) continue;
            var edge = this.getEdge(current, i);
            if (edge < Infinity) {
                var alternate = determined + edge;
                if (alternate < distance[i]) {
                    distance[i] = alternate;
                    previous[i] = current;
                }
            }
        }
    }

    for (var i = 0; i < w; i++) {
        var prev = previous[i];
        if (typeof prev !== "undefined")
            graph.addEdge(prev, i, this.getEdge(prev, i));
    }

    return graph;
};

var graph = new Graph(6)
    .addEdge(0, 1, 7)
    .addEdge(0, 2, 9)
    .addEdge(0, 3, 14)
    .addEdge(1, 2, 10)
    .addEdge(1, 4, 15)
    .addEdge(2, 3, 2)
    .addEdge(2, 4, 11)
    .addEdge(3, 5, 9)
    .addEdge(4, 5, 6);

var canvas = document.querySelector("canvas");
var context = canvas.getContext("2d");
context.textBaseline = "middle";
context.textAlign =...