Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Floyd Warshall算法-还可以获得除最短距离以外的每个点的名称_C#_Algorithm_Math_Shortest Path_Floyd Warshall - Fatal编程技术网

C# Floyd Warshall算法-还可以获得除最短距离以外的每个点的名称

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 (

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

首先,我用距离和重量来填充矩阵。我将其命名为,例如:dist[0,1]指的是点0和点1之间的道路。每个点都有一个编号

矩阵将相应地填充,然后运行峡湾华沙算法:

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].