我正在试图弄清楚如何使用QuickGraph for C#创建一个无向加权图的新实例。我的目标是创建一个无向加权图,其中填充了随机数量的节点和随机生成的开始和结束节点,其最短路径可以使用广度优先搜索算法找到。文档并不多,所以如果有人能提供任何可以理解的帮助。
答案 0 :(得分:2)
理查德,QuickGraph不会为您做任何此类操作,它只会使您可以订阅的活动可用。通过订阅这些活动,您可以做出相应的回应。在深度优先搜索中缺少QuickGraph文档(是的,我意识到你正在做BFS而不是DFS,但是如何订阅事件的概念是相同的):
顺便说一句,打开Reflector并查看QuickGraph.Algorithms.Observers。使用与BFS不同的方法,您的最短路径要求会更容易。
答案 1 :(得分:1)
此算法尚无文档;但是还有下一个最好的东西(或者甚至是更好的东西):单元测试!
如果您下载QuickGraph源代码并找到BreadthFirstAlgorithmSearchTest.BreadthFirstSearchAll(),您将看到算法的示例用法,该算法在测试项目中的所有有向图上运行BFS。
答案 2 :(得分:0)
Github上有一个简短的主题,其中有一个有用的基本示例,说明了如何设置BFS并从中获得一些结果。
特定于您的应用程序的其他详细信息(创建随机图等)显然不属于本示例。
来源: https://github.com/YaccConstructor/QuickGraph/issues/189#issuecomment-487493207
这是一个完整的例子:
UndirectedGraph<string, Edge<string>> g = new UndirectedGraph<string, Edge<string>>(); g.AddVerticesAndEdge(new Edge<string>("0", "1")); g.AddVerticesAndEdge(new Edge<string>("0", "2")); g.AddVerticesAndEdge(new Edge<string>("2", "3")); var algo = new UndirectedBreadthFirstSearchAlgorithm<string, Edge<string>>(g); var observer = new UndirectedVertexPredecessorRecorderObserver<string, Edge<string>>(); var rootVertex = "0"; using (observer.Attach(algo)) { algo.Compute(rootVertex); } var targetVertex = "3"; bool foundPath = observer.TryGetPath(targetVertex, out IEnumerable<Edge<string>> path);
路径将包含两个边缘:
[0]: "0"->"2" [1]: "2"->"3"