【问题标题】:Dijkstra algorithm not working (Adjacency matrix)Dijkstra 算法不起作用(邻接矩阵)
【发布时间】: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

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

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

【问题讨论】:

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

标签: c++


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多