Dijkstra 没有找到正确的路径

Dijkstra not finding correct path

我已经实现了 Dijkstra 算法来在无向加权图中找到最大权重路径。不幸的是,它 return 并非在所有情况下都是最佳路径。感谢任何帮助弄清楚我做错了什么。我盯着这段代码看了太久了。

        graph.AddConnection("A", "B", .5);
        graph.AddConnection("A", "J", .2);
        graph.AddConnection("A", "F", .63);
        graph.AddConnection("A", "Z", .92);
        graph.AddConnection("B", "C", .7);
        graph.AddConnection("B", "E", .112);
        graph.AddConnection("C", "D", .1);
        graph.AddConnection("F", "G", .21);
        graph.AddConnection("G", "D", .92);
        graph.AddConnection("J", "G", .56);
        graph.AddConnection("Z", "D", 0.99);

我试图找到从 A 到 G 的最强路径,它应该是: 阿兹达格。相反,它正在输出 AFG。

private void ProcessGraph(Graph graph, string startingNode)
{
    bool finished = false;
    var queue = graph.Nodes.Values.ToList();
    while (!finished)
    {
        Node nextNode = queue.OrderBy(n => n.DistanceFromStart).FirstOrDefault(
        n => !double.IsPositiveInfinity(n.DistanceFromStart));
        if (nextNode != null)
        {
            var connections = node.Connections.Where(c => queue.Contains(c.Target));
            foreach (var connection in connections)
            {
              double distance = node.DistanceFromStart + connection.Distance;
              if (distance < connection.Target.DistanceFromStart)
                  connection.Target.DistanceFromStart = distance;
            }
            queue.Remove(nextNode);
        }
        else
        {
            finished = true;
        }
    }
}

编辑:权重限制为 0 < w < 1。

编辑 2:如果有人看到这个并犯了和我一样的错误:我刚刚意识到我是按递增顺序而不是递减顺序排列邻居的权重,这就是我的路径不正确的原因。我改为:

queue.OrderByDescending(n => n.DistanceFromStart).FirstOrDefault(
        n => !double.IsPositiveInfinity(n.DistanceFromStart));

并且算法按预期工作。

只需将所有权重 w 更改为 1.0 - w,Dijkstras 即可开箱即用。

将其转换为找到最大路径 可能 可行,但即使您可以修改算法使其可行,当您可以执行上述操作时,这些努力也是徒劳的。