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