博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

P103 任意两点之间的最短路问题 Floyd_warshall算法

Posted on 2016-03-03 14:06  shaoweiyi  阅读(140)  评论(0编辑  收藏  举报
//任意两点间的最短路问题 Floyd-Warshall算法
//只使用0~k, i,j的情况下,i到j的最短距离;
/*
d[k][i][j]  d[k-1][i][j] **G[i][k]  **G[k][j]        G[k][i] G[j][k]
d[k-1][i][k]  d[k-1][k][j]
*/
d[k][i][j]=min(d[k-1][i][j],d[k-1][i][k]+d[k-1][k][j]);

///int G[MAX_V][MAX_V];
///实际上采用循环更新就行了
///DP求任意两点之间的最小路问题
int d[MAX_V][MAX_V];

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