【问题标题】:Understanding QuickGraph ShortestPathsDijkstra results了解 QuickGraph ShortestPathsDijkstra 结果
【发布时间】:2020-05-01 22:20:06
【问题描述】:

我有一张图,想用 Dijkstra 算法进行一些最短路径搜索(我并不真正关心算法,但我熟悉的是 dijkstra)。

这是我所拥有的图表的相关部分:

现在我按照 Quickgraph 文档进行 dijkstra 搜索:

//Build QuickGraph UndirectedGraph from our data
UndirectedGraph<int, Edge<int>> ug = g.CreateUndirectedQuickGraph();

Func<Edge<int>,double> weightFunc = (Edge<int> edge) =>
{
    return 1; //without weights at this moment
};

var tryGetPath = ug.ShortestPathsDijkstra(weightFunc, 20);

IEnumerable<Edge<int>> path;
if (tryGetPath(23, out path))
    foreach (var e in path)
        Trace.WriteLine(e);

如您所见,我正在尝试获取节点 20 和 23 之间的最短路径。我得到的输出是

20 -> 4
22 -> 4
23 -> 22

这似乎是对的,但我真的不明白如何从中提取节点路径。我期待的是:

20 -> 4
4 -> 22
22 -> 23

如何从这个输出构建最终路径?


从 20 到 34 的示例:

 20->3 
 5->3 
 8->5 
 9->8
 36->9
 36->11
 34->11

注意36-&gt;11 是如何出现在最后一条边之前的。

【问题讨论】:

  • 你能在第一个之后反转结果吗?这样它是可读的
  • 不,不工作。它适用于该示例。还有其他输出打破了这一点。从 20 到 34 的示例:20->3、5->3、8->5、9->8、36->9、36->11、34->11。注意 36->11 是如何出现在最后一条边之前的。怎么会这么难?
  • 该死。我不确定,您是否 100% 确定您的算法中没有交换任何内容?
  • 路径有什么实际问题吗?对我来说,它们看起来不错,总是首先在边中报告较高的顶点,并且边由于某种原因是有向的,尽管您有一个无向图。您打印的e 的运行时类型是什么?是EdgeUndirectedEdge 还是其他的?

标签: c# .net .net-core graph quickgraph


【解决方案1】:

我没有在 QuickGraph 中使用过那个特定的算法,但这就是它看起来的样子......

由于您使用的是无向图,因此算法可能按预期工作。

对于无向边A-&gt;B(真的是A-B),我认为您可以同样将边缘描述为B-&gt;A,这应该被认为是等价的。

也就是说,您可以将输出解释为边的排序而不是顶点的排序。


如果您可以为第二个更长的示例添加额外的节点,也许我们可以检查这个想法是否完全有效。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 2020-05-07
    • 2012-01-25
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2015-06-18
    • 2020-06-25
    • 2016-12-13
    相关资源
    最近更新 更多