Dijkstra 算法不起作用(邻接矩阵)

Posted

技术标签:

【中文标题】Dijkstra 算法不起作用(邻接矩阵)【英文标题】:Dijkstra algorithm not working (Adjacency matrix) 【发布时间】:2016-12-10 21:56:38 【问题描述】:

我正在使用来自http://www.geeksforgeeks.org/printing-paths-dijkstras-shortest-path-algorithm/ 网站的 dijkstras 算法代码

我从这个网站使用,因为我希望能够找到从一个节点到所有其他节点的最短路径,并且我还想打印出路径信息。

打印路径信息的功能就是这个,这是我很困惑的部分。

int printSolution(int dist[], int n, int parent[])

    int src = 0;
    printf("Vertex\t  Distance\tPath");
    for (int i = 1; i < V; i++)
    
        printf("\n%d -> %d \t\t %d\t\t%d ", src, i, dist[i], src);
        printPath(parent, i);
    

它说返回类型是 int,但它从不返回任何东西。我把 int 拿走并放 void 但它不起作用。

这是当这个函数有 void 返回值时我得到的输出:

0 -> 1 -2147483590 0 1

0 -> 2 -2147483582 0 2

0 -> 3 -2147473649 0 3

0 -> 4 -2147473649 0 4

0 -> 5 -2147473649 0 5

0 -> 6 -2147473649 0 6

0 -> 7 -2147473649 0 7

我正在使用上面链接中的确切代码。

我想我的问题是为什么创建者会发布一个不起作用的功能,我该如何更改它以使其工作。

【问题讨论】:

忘掉网站吧。这可能对您的问题有帮助:***.com/questions/40875191/… 它说返回类型是 int,但它从不返回任何东西。 -- 从声明为返回东西的函数中不返回任何东西是未定义的行为。有很多这样的网站,比如你链接到的那个网站显示了糟糕的、有缺陷的代码,而这些代码恰好返回了正确的答案(作者因为提出了正确的答案而受到称赞,即使代码很糟糕)。 【参考方案1】:

由于您没有发布调用上下文,我无法告诉您为什么将返回类型从 int 更改为 void 会使其不起作用。但是,可以编译没有return 语句的返回函数,如here 所述。 (虽然这不是一个好的做法)至于为什么创作者会发布一个不起作用的功能,嗯……欢迎上网。

根据给定的输出,问题似乎位于代码中的其他位置。对于 Dijikstra 的算法,任何索引的 dist[i] 的值都不应该是负数,因此我建议查看设置了 dist[i] 的值的任何位置。

【讨论】:

以上是关于Dijkstra 算法不起作用(邻接矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

邻接矩阵中的 Dijkstra 算法

最短路径(邻接矩阵)-Dijkstra算法

算法Dijkstra算法(单源最短路径问题) 邻接矩阵和邻接表实现

基于邻接矩阵的Dijkstra算法——C++实现

c_cpp Dijkstra的邻接矩阵表示算法

基于邻接矩阵的Dijkstra算法——C++实现