我使用邻接列表得到了这个Dijkstra代码图,但是我很难修改它以显示最小路径。有帮助吗?我需要前辈的向量来计算每个顶点的中介性和接近度。
[4, 19, 2, 5, 11]
[4, 2, 5, 11, 19]
[8, 1, 2, 3, 4, 5, 6, 1, 2]
[8, 1, 1, 2, 2, 3, 4, 5, 6]
4 19 2 5 11
8 1 2 3 4 5 6 1 2
答案 0 :(得分:0)
保留一些额外信息,例如parent
指针,指向发现的上一个节点。
struct MinHeapNode
{
int v;
int dist;
struct MinHeapNode *parent;
}
现在每当您执行extractMin()
操作时,您获得的地址,您可以将其存储在某个临时变量中,并将其分配给minHeapNode->parent
struct MinHeapNode *prev = NULL;
while (!isEmpty(minHeap))
{
struct MinHeapNode* minHeapNode = extractMin(minHeap);
// Storing the previous node's address
minHeapNode->parent = prev;
prev = minHeapNode;
int u = minHeapNode->v; // Store the extracted vertex number
例如,如果您的节点按此顺序排列,1 2 3 4 5
然后你就可以获得如下代表:
1 <- 2 <- 3 <- 4 <- 5
现在在while循环结束时,您可以通过向后遍历打印数据,如下所示的函数可以正常工作。
void printPath (struct MinHeapNode *last)
{
while (last != NULL)
{
printf ("%d -> ", last->v);
last = last->parent;
}
printf ("NULL\n");
}
随意将功能添加到您自己的显示方法中,或修改此功能以显示您喜欢的内容。如果您有任何疑问,请发表评论。