C++ Floyd-Warshall算法的路径重建&x27;有些价值观是行不通的

C++ Floyd-Warshall算法的路径重建&x27;有些价值观是行不通的,c++,algorithm,C++,Algorithm,我实现了这样的算法 它仅适用于某些值,例如从顶点5到顶点0的路径构建(返回5 2 0)。但从0到5的路径构建不正确(返回5)。长度矩阵构建正确我认为问题在于这一行(它寻找不可能的路径): 您的节点从零开始索引,因此前置节点可以合法地等于0。 当路由涉及节点零时,您将错误地清除路径 请尝试使用此选项: else if (predecessors[start][finish] == -1) 请注意,稍后困惑的读者:矩阵已被编辑,因此现在是方形的。为什么不使用调试器跟踪代码以查看它与算法的偏差?

我实现了这样的算法


它仅适用于某些值,例如从顶点5到顶点0的路径构建(返回5 2 0)。但从0到5的路径构建不正确(返回5)。长度矩阵构建正确

我认为问题在于这一行(它寻找不可能的路径):

您的节点从零开始索引,因此前置节点可以合法地等于0。 当路由涉及节点零时,您将错误地清除路径

请尝试使用此选项:

else if (predecessors[start][finish] == -1) 

请注意,稍后困惑的读者:矩阵已被编辑,因此现在是方形的。为什么不使用调试器跟踪代码以查看它与算法的偏差?
for (int i = 0; i < weight_matrix.size(); i++)
  {
     for (int j = 0; j < weight_matrix[i].size(); j++)
    {
        if (weight_matrix[i][j] != 0 && weight_matrix[i][j] != infinity)
        {
            predecessors[i][j] = i;
        }
        else
        {
            predecessors[i][j] = -1;
        }
    }
 }  
0   2 1  4   inf inf
2   0 7  3   inf inf
1   i 0  5   10  4
4   7 5  0   inf 5
inf 3 10 inf 0  4 
inf inf 4 5  4  0
else if (predecessors[start][finish] == 0)
else if (predecessors[start][finish] == -1)