使用递归和逆序打印 Dijkstra SSSP
Printing Dijkstra SSSP with recursion and in reverse order
我正尝试按特定顺序打印 SSSP,但卡住了。
假设我有 2 个数组:
节点 = [0, 1, 2, 3]
预测 = [-1, 2, 0, 1]
这是我想出的代码:
void printPath (int currentNode) {
if (pred[currentNode] == -1) {
printf("%d\n", currentNode);
return;
} else {
printf("%d-", currentNode);
return printPath (pred[currentNode]);
}
}
printPath(1);
此代码 returns 节点 1 的路径为:1-2-0。当我想要的结果是0-2-1.
用我写的递归函数能达到这个结果吗?
非常感谢!
只需将printf
节点语句移到递归调用后执行即可。
int node[] = {0, 1, 2, 3};
int pred[] = {-1, 2, 0, 1};
...
void printPath (int cnode) {
if (-1 == pred[cnode]) {
printf("\n%d", cnode);
return;
} else {
printPath (pred[cnode]);
printf("->%d", cnode);
}
}
...
printPath(1);
我正尝试按特定顺序打印 SSSP,但卡住了。
假设我有 2 个数组:
节点 = [0, 1, 2, 3] 预测 = [-1, 2, 0, 1]
这是我想出的代码:
void printPath (int currentNode) {
if (pred[currentNode] == -1) {
printf("%d\n", currentNode);
return;
} else {
printf("%d-", currentNode);
return printPath (pred[currentNode]);
}
}
printPath(1);
此代码 returns 节点 1 的路径为:1-2-0。当我想要的结果是0-2-1.
用我写的递归函数能达到这个结果吗?
非常感谢!
只需将printf
节点语句移到递归调用后执行即可。
int node[] = {0, 1, 2, 3};
int pred[] = {-1, 2, 0, 1};
...
void printPath (int cnode) {
if (-1 == pred[cnode]) {
printf("\n%d", cnode);
return;
} else {
printPath (pred[cnode]);
printf("->%d", cnode);
}
}
...
printPath(1);