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 算法不起作用(邻接矩阵)的主要内容,如果未能解决你的问题,请参考以下文章