任意の2点間の最短経路問題(Floyd-Warshallアルゴリズム)

1515 ワード

                            。Floyd-Warshall      
             。  ,    p={v1,v2,...vl}           p   v1  vl       ,       {v2,v3,...vl-1}    。
Floyd-Warshall      : 
   G      V={1,2,3,...,n},         {1,2,..,k},   K   n   。
       i,j  V, i j             {1,2,3,...,k}   ,  p          ,      p     。Floyd-Warshall       p  i j      
    {1,3,..,k-1}          。        k     p        。
    (1)    k    p      ,   p             {1,2,...,k-1}.  ,   i   j          {1,2,...,k}       。
    (2)    k   p      ,   p     i~k,k~j。
      ,        :
 i j      d[i][j],          :
d[i][j]= d[i][j]         k
       = min(d[i][j],d[i][k]+d[k][j])       k                 
       min(d[i][j],d[i][k]+d[k][j]) 
      DP  ,   O(|V|3)                  。
int d[MAX_V][MAX_V]; //d[u][v]   e=(u,v)   (     INF,d[i][i]=0)
int V; //    

void floyd_warshall(){
    for(int k=0;k
        for(int i=0;i
            for(int j=0;j
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
            } 
        }
    }
}