繁体   English   中英

了解 QuickGraph ShortestPathsDijkstra 结果

[英]Understanding QuickGraph ShortestPathsDijkstra results

我有一张图,想用 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 之间的最短路径。我得到的 output 是

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

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

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

如何从此 output 构建最终路径?


从 20 到 34 的示例:

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

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

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

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

对于无向边缘A->B (实际上是AB ),我认为您可以同样将边缘描述为B->A ,这应该被认为是等效的。

即,您可以将 output 解释为边的排序而不是顶点的排序。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM