for (i = 1; i <= T->vertices; i++)
{
if (T->parent[i] != -1)
{
printf("SSSP Distance from %d->%d is %d: {%d",
T->visited[i], i, T->distance[i], i);
j = i;
while(T->parent[j] != -1)
{ //the path is printed backwards, but still in order.
j = T->parent[j];
printf("<-%d", j);
}
printf("}\n");
}
}
for (i = 1; i <= T->vertices; i++)
{
if (T->parent[i] != -1)
{
printf("SSSP Distance from %d->%d is %d: {",
T->visited[i], i, T->distance[i]);
path_printer(T, i);
printf("}\n");
}
}
2条答案
按热度按时间mw3dktmi1#
使用递归路径打印机。您有:
考虑添加函数:
并将循环修改为:
递归函数以相反的顺序打印列表项;剩下的都是表面文章。
注意:未经测试的代码!
由于这个问题没有提供MCVE(Minimal, Complete, Verifiable Example-或MRE或SO现在使用的任何名称)或SSCCE(Short, Self-Contained, Correct Example-相同的概念用不同的名称),所以不可能测试这个建议的解决方案。我不得不猜测变量
T
的类型名称-我认为它是SomeType *
。hsgswve42#
您可以考虑先使用堆栈存储遍历结果,然后输出堆栈的内容,这样就可以给予您想要的结果。