C# Floyd Warshall算法-还可以获得除最短距离以外的每个点的名称
我创建了这个算法,以获得地图上两个选定点之间的最短点 首先,我用距离和重量来填充矩阵。我将其命名为,例如:dist[0,1]指的是点0和点1之间的道路。每个点都有一个编号 矩阵将相应地填充,然后运行峡湾华沙算法:C# Floyd Warshall算法-还可以获得除最短距离以外的每个点的名称,c#,algorithm,math,shortest-path,floyd-warshall,C#,Algorithm,Math,Shortest Path,Floyd Warshall,我创建了这个算法,以获得地图上两个选定点之间的最短点 首先,我用距离和重量来填充矩阵。我将其命名为,例如:dist[0,1]指的是点0和点1之间的道路。每个点都有一个编号 矩阵将相应地填充,然后运行峡湾华沙算法: for (int k = 0; k < count; ++k) { for (int i = 0; i < count; ++i) { for (
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];
}
}
}
}
返回正确的值,一切正常。这是我的问题。我需要将其设置为可以看到它通过哪些点。我的意思是,如果我想从点1到点5,最短的路线是通过3和6,它会显示1,3,6,5
有什么想法吗?完全停留在这一点上。创建另一个与dist尺寸相同的数组,我们称之为vert 线下:
dist[i, j] = dist[i, k] + dist[k, j];
加上
然后调用定义为的递归函数
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);
}
void pr(整数x,整数y)
{
如果(x==y)
返回;
pr(x,vert[x,vert[x,y]]);
无法创建另一个与dist具有相同维度的数组,让我们称之为vert
线下:
dist[i, j] = dist[i, k] + dist[k, j];
加上
然后调用定义为的递归函数
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);
}
void pr(整数x,整数y)
{
如果(x==y)
返回;
pr(x,vert[x,vert[x,y]]);
无法创建另一个与dist具有相同维度的数组,让我们称之为vert
线下:
dist[i, j] = dist[i, k] + dist[k, j];
加上
然后调用定义为的递归函数
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);
}
void pr(整数x,整数y)
{
如果(x==y)
返回;
pr(x,vert[x,vert[x,y]]);
无法创建另一个与dist具有相同维度的数组,让我们称之为vert
线下:
dist[i, j] = dist[i, k] + dist[k, j];
加上
然后调用定义为的递归函数
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);
}
void pr(整数x,整数y)
{
如果(x==y)
返回;
pr(x,vert[x,vert[x,y]]);
这是否需要Floyd Warshall?Djikstra的算法以较少的计算复杂度解决了同样的问题,并且更容易回溯结果。两件事:如果你查看(或伪代码)你将看到路径是如何计算的。到目前为止,你所拥有的只是算法的一半。其次,F-W不适合计算两点之间的最短路径:它非常低效。你想要类似的东西。F-W代表所有成对的最短路径。同样值得注意的是,这些维基百科文章不是很好,textbOOK描述的更好我已经尝试了很多次来构建路径,但是都没有成功。在从i到j的最短路径(当前已记忆)上保留一个矩阵,其中j的前辈作为条目(i,j);想想你想将矩阵初始化为什么。每当你更新dist[i][j],也要更新前辈[i][j].是否需要是Floyd Warshall?Djikstra的算法以较少的计算复杂度解决了相同的问题,并且更容易回溯结果。两件事:如果您查看(或伪代码)你将看到路径是如何计算的。到目前为止,你所拥有的只是算法的一半。其次,F-W不适合计算两点之间的最短路径:它非常低效。你想要类似的东西。F-W代表所有成对的最短路径。同样值得注意的是,这些维基百科文章不是很好,textbOOK描述的更好我已经尝试了很多次来构建路径,但是都没有成功。在从i到j的最短路径(当前已记忆)上保留一个矩阵,其中j的前辈作为条目(i,j);想想你想将矩阵初始化为什么。每当你更新dist[i][j],也要更新前辈[i][j].是否需要是Floyd Warshall?Djikstra的算法以较少的计算复杂度解决了相同的问题,并且更容易回溯结果。两件事:如果您查看(或伪代码)你将看到路径是如何计算的。到目前为止,你所拥有的只是算法的一半。其次,F-W不适合计算两点之间的最短路径:它非常低效。你想要类似的东西。F-W代表所有成对的最短路径。同样值得注意的是,这些维基百科文章不是很好,textbOOK描述的更好我已经尝试了很多次来构建路径,但是都没有成功。在从i到j的最短路径(当前已记忆)上保留一个矩阵,其中j的前辈作为条目(i,j);想想你想将矩阵初始化为什么。每当你更新dist[i][j],也要更新前辈[i][j].是否需要是Floyd Warshall?Djikstra的算法以较少的计算复杂度解决了相同的问题,并且更容易回溯结果。两件事:如果您查看(或伪代码)你将看到路径是如何计算的。到目前为止,你所拥有的只是算法的一半。其次,F-W不适合计算两点之间的最短路径:它非常低效。你想要类似的东西。F-W代表所有成对的最短路径。同样值得注意的是,这些维基百科文章不是很好,textbOOK描述的更好我已经尝试了很多次来构建路径,但是都没有成功。在从i到j的最短路径(当前已记忆)上保留一个矩阵,其中j的前辈作为条目(i,j);想想你想将矩阵初始化为什么。每当你更新dist[i][j],也要更新前辈[i][j].