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)