1.Floy-Warshall 算法
是一种计算图中所有最短路劲的动态规划算法,通过该算法,我们可以找出所有源到顶点的最短路径
const floydWarshall = graph =>{
const dist = [];
const { length } = grash;
for(let i = 0;i<length;i++){ //{1}
dist[i]=[];
for(let j = 0;j<length;j++) {
if(i===j){
dist[i][j]=0 // {2}
} else if(!isFinite(graph[i][j]){
dist[i][j]=Infinity; //{3}
} else {
dist[i][j]=graph[i][j];//{4}
}
}
}
for(let k=0;k<length;k++){
for(let i =0;i<length;i++){ // {5}
for(let j=0;j<length;j++){
if(dist[i][k]+dist[k][j]<dist[i][j]){ //{6}
dist[i][j]=dist[i][k]+dist[k][j]} //{7}
}
}
}
return dist
}下面是对算法过程的描述
首先,把distance数组初始化为每个顶点之间的权值(行{1}),因为i到j可能最短的距离就这些顶点之间的权值(行{4})。顶点到自身的距离0(行{2}),如果两个顶点间没有没有边则就将其表示为Infinity(行{3})。将顶点0到K作为中间点(行{5}),从I到j最短距离进过K,行{6}给出的公式用来计算通过顶点k的和j之间的最短路劲,如果一个最短路径的新值被找到,我们要使用并存储他