floyd算法

2024-06-19 14:44:49 浏览数 (1)

算法思想

该算法是为了求出所有点与点之间最短的距离,可以通过n次调用dijkstra算法来求出,也可以采用此算法,该算法通过不断在两点之间加入点来获取;两点之间最短的距离,直到所有的点都加入后,求出的值就是最小的距离。

代码实现

需要存储邻接矩阵的数组p,还有存储各点之间路径的字符串数组p2。 首先若两点之间是直接相连的,邻接矩阵中对应的元素赋值为它们之间的权,然后从0结点开始一直到n节点,不断地向各个边之间加入节点,判断加入后的距离是否比原先的小,然后变更p和path中的值,这样一直到到循环结束,获得的就是各点与各点之间最小的距离。

代码语言:javascript复制
  for(int i=0;i<b;i  )
    {
        cin>>tail>>head;
        cin>>p[tail][head];
    }
    for(int i=0;i<a;i  )
    {
        p[i][i]=0;
    }
    for(int k=0;k<a;k  )
    {
         for(int i=0;i<a;i  )
    {
        for(int j=0;j<a;j  )
        {
            if((p[i][k] p[k][j])<p[i][j])
            {
                p[i][j]=p[i][k] p[k][j];
                p2[i][j]=p2[i][k];
                p2[i][j].push_back(48 k);
                p2[i][j] =p2[k][j];
            }
        }
    }
    }

0 人点赞