Floyd-Warshall算法-也得到除最短距离以外的每个点的名称

本文关键字:短距离 算法 Floyd-Warshall | 更新日期: 2023-09-27 18:03:39

我创建了这个算法,以获得地图上两个选定点之间的最短点。

首先我用距离和权重填充矩阵。我这样命名它,例如:dist[0,1]指的是点0和点1之间的路。每个点都有一个编号。

矩阵被相应地填充,然后Fjord Warshall算法运行:

for (int k = 0; k < count; ++k)
            {
                for (int i = 0; i < count; ++i)
                {
                    for (int j = 0; j < count; ++j)
                    {
                        if (dist[i,j] > (dist[i,k]+dist[k,j]))
                        {
                            dist[i, j] = dist[i, k] + dist[k, j];
                        }
                    }
                }
            }

导出每条路径之间的最短点。然后我检查我所拥有的路径,以得到它的最短点:

                shortest = dist[x, y];

返回正确的值,一切正常。这是我的问题。我需要设置它,以便看到它经过哪些点。我的意思是,如果我想从点1到点5,而最短的路线是经过3和6,它会显示1、3、6、5。

任何想法?完全卡住了

Floyd-Warshall算法-也得到除最短距离以外的每个点的名称

创建另一个与dist相同尺寸的数组,命名为vert。

行下:

dist[i, j] = dist[i, k] + dist[k, j];

,

vert[i, j] = k;

然后调用定义为,

的递归函数
void pr(int x, int y)
{
    if(x == y)
        return;
    pr(x, vert[x, vert[x, y]]);
    cout << vert[x, y];
    pr(vert[vert[x, y]], y);
}