修改Dijkstra代码以打印路径

时间:2017-07-01 00:36:31

标签: c graph dijkstra

我使用邻接列表得到了这个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  

1 个答案:

答案 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");
}

随意将功能添加到您自己的显示方法中,或修改此功能以显示您喜欢的内容。如果您有任何疑问,请发表评论。