C# Dijkstra找不到正确的路径

C# Dijkstra找不到正确的路径,c#,algorithm,dijkstra,C#,Algorithm,Dijkstra,我已经实现了Dijkstra算法来寻找无向加权图中的最大权路径。不幸的是,它并不是在所有情况下都返回最佳路径。如果能帮我弄清楚我做错了什么,我将不胜感激。我盯着这个代码看太久了 graph.AddConnection("A", "B", .5); graph.AddConnection("A", "J", .2); graph.AddConnection("A", "F", .63); graph.AddConnection("A"

我已经实现了Dijkstra算法来寻找无向加权图中的最大权路径。不幸的是,它并不是在所有情况下都返回最佳路径。如果能帮我弄清楚我做错了什么,我将不胜感激。我盯着这个代码看太久了

        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的最强路径,应该是: AZDG。相反,它输出的是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;
        }
    }
}

该算法正在按预期工作。

只要将所有权重
w
更改为
1.0-w
,Dijkstras就会立即工作


将其转换为最大路径可能会起作用,但即使您可以修改算法以使其起作用,如果您只需执行上述操作,所做的努力也将付之东流。

只需将所有权重
w
更改为
1.0-w
,Dijkstras将立即生效


将其转换为最大路径可能会起作用,但即使您可以修改算法以使其起作用,如果您只需执行上述操作,那么所做的努力也是徒劳的。

您搜索的是最小权重路径,而不是最大权重路径,这就像搜索gpsas Boo said的最长路径一样-Dijkstra为您提供了最小长度路径。如果你想将其调整为最大值,并且你在路径中可能遇到的最大值为1.0,你必须从1.0中减去边的权重,并将其作为值输入到算法中。我的权重限制为0queue.OrderByDescending(n => n.DistanceFromStart).FirstOrDefault( n => !double.IsPositiveInfinity(n.DistanceFromStart));