算法

148 阅读1分钟
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之间的最短路劲,如果一个最短路径的新值被找到,我们要使用并存储他