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。
任何想法?完全卡住了
创建另一个与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);
}