c - 打印 dijkstra 算法中的路径

标签 c dijkstra shortest-path

我的计算机科学教授给了我一个 dijstras 算法的实现,他要求我们修改它以打印从源节点“src”(参见代码)到每个节点的路径,以及距离(它已经做)。我已经研究了这个问题大约一周了,并尝试了几件事。我一生都无法弄清楚......任何帮助将不胜感激。该图由邻接矩阵表示,并且有一个包含其大小的全局:

int n; //Global matrix's size
int minDistance(int dist[], bool sptSet[]){
    // Initialize min value
    int min = INT_MAX, min_index;
    int i = 0;
    for ( i = 0; i < n; i++)
        if (sptSet[i] == false && dist[i] <= min)
            min = dist[i], min_index = i; 
   return min_index;
}

int printSolution(int dist[]){
   printf("Vertex   Distance from Source\n");
   int i;
   for (i = 0; i < n; i++)
      printf("%d \t\t %d\n", i, dist[i]);
}

void dijkstra(int ** graph, int src){
    //correting zeros (won't work with negative values)
    correctZeros(graph);
    int dist[n]; 
    bool sptSet[n];
    int i;
    for (i = 0; i < n; i++)
        dist[i] = INT_MAX, sptSet[i] = false;
    dist[src] = 0;

    // Find shortest path for all vertices
    int count;
    for (count = 0; count < n; count++){
        int u = minDistance(dist, sptSet);
        sptSet[u] = true;
        int j;
        for (j = 0; j < n; j++){
            printf("%d", u);
            if (!sptSet[j] && graph[u][j] && dist[u] != INT_MAX && dist[u]+graph[u][j] < dist[j]){
                dist[j] = dist[u] + graph[u][j];

            }
        }
    }
    printSolution(dist);
}

最佳答案

您需要做的就是为每个节点存储最短路径的下一跳。每当您更新节点最短路径的距离时,此信息都会更新。

关于c - 打印 dijkstra 算法中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454062/

相关文章:

C Argv 检查哪个 argv 路径来自哪个输入

c - Windows 中 Eclipse 上的 OpenCV242

c - 利用消息将一个进程的数据发送到另一进程 (Linux)

java - Java的最短路径和距离算法?

算法:所有点之间的最短路径

c - 在 IDE 中为 C 源文件自动生成头文件

algorithm - 图 - 顶点权重的最短路径

php - 我需要未知数量的坐标字段(或几个字段)如何去做?

java - Dijkstra算法java实现bug

algorithm - 改进的 Dijkstra 算法