Ruta más corta en JavaScript

He estado buscando durante semanas una forma de calcular las rutas más cortas en JavaScript. He estado jugando con el libroEstructuras de datos y algoritmos por Groner (acertadamente nombrado) enhttps://github.com/loiane/javascript-datastructures-algorithms/tree/master/chapter09.

El problema que sigo encontrando es que el código está tan personalizado que es casi imposible reescribirlo para producir los resultados deseados. Me gustaría poder obtener el camino más corto desde cualquier vértice dado a cualquier otro, en lugar de, como lo codifica Groner, solo la lista de todo de A. Me gustaría poder obtener, por ejemplo, el camino desde F a B, o de C a A.

El código completo está aquí:http://jsfiddle.net/8cn7e2x8/

¿Alguien puede ayudar?

var graph = new Graph();
var myVertices = ['A','B','C','D','E','F'];
for (var i=0; i<myVertices.length; i++) {
    graph.addVertex(myVertices[i]);
}
graph.addEdge('A', 'B');
graph.addEdge('B', 'C');
graph.addEdge('B', 'E');
graph.addEdge('C', 'D');
graph.addEdge('C', 'E');
graph.addEdge('C', 'G');
graph.addEdge('D', 'E');
graph.addEdge('E', 'F');

graph.dfs();

console.log('********* sortest path - BFS ***********');
var shortestPathA = graph.BFS(myVertices[0]);

//from A to all other vertices
var fromVertex = myVertices[0];

for (i = 1; i < myVertices.length; i++) {
    var toVertex = myVertices[i],
    path = new Stack();
    for (var v = toVertex; v !== fromVertex; v = shortestPathA.predecessors[v]) {
        path.push(v);
    }
    path.push(fromVertex);
    var s = path.pop();
    while (!path.isEmpty()) {
        s += ' - ' + path.pop();
    }
    console.log(s);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta