/**
							 | 
						|
								 * Created by Alex on 10-Aug-15.
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class FloydWarshall {
							 | 
						|
								  constructor(){}
							 | 
						|
								
							 | 
						|
								  getDistances(body, nodesArray, edgesArray) {
							 | 
						|
								    let D_matrix = {}
							 | 
						|
								    let edges = body.edges;
							 | 
						|
								
							 | 
						|
								    // prepare matrix with large numbers
							 | 
						|
								    for (let i = 0; i < nodesArray.length; i++) {
							 | 
						|
								      D_matrix[nodesArray[i]] = {};
							 | 
						|
								      for (let j = 0; j < nodesArray.length; j++) {
							 | 
						|
								        D_matrix[nodesArray[i]][nodesArray[j]] = 1e9;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    // put the weights for the edges in. This assumes unidirectionality.
							 | 
						|
								    for (let i = 0; i < edgesArray.length; i++) {
							 | 
						|
								      let edge = edges[edgesArray[i]];
							 | 
						|
								      D_matrix[edge.fromId][edge.toId] = 1;
							 | 
						|
								      D_matrix[edge.toId][edge.fromId] = 1;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    // calculate all pair distances
							 | 
						|
								    for (let k = 0; k < nodesArray.length; k++) {
							 | 
						|
								      for (let i = 0; i < nodesArray.length; i++) {
							 | 
						|
								        for (let j = 0; j < nodesArray.length; j++) {
							 | 
						|
								          D_matrix[nodesArray[i]][nodesArray[j]] = Math.min(D_matrix[nodesArray[i]][nodesArray[j]],D_matrix[nodesArray[i]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[j]])
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    // remove the self references from the matrix
							 | 
						|
								    for (let i = 0; i < nodesArray.length; i++) {
							 | 
						|
								      delete D_matrix[nodesArray[i]][nodesArray[i]];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return D_matrix;
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								export default FloydWarshall;
							 |