我正在使用Martin Erwig的函数图形库(FGL)来表示以下简单有向加权图。
![graph](https://istack.dev59.com/sUt4i.webp)
genLNodes :: [LNode String]
genLNodes = zip [1..5] ["A","B","C","D","E"]
genLEdges :: [LEdge Int]
genLEdges = [(1,2,4),(1,3,1),(2,4,2),(3,4,2),(2,5,1),(4,5,1),
(2,1,4),(3,1,1),(4,2,2),(4,3,2),(5,2,1),(5,4,1)]
mygraph :: Gr String Int
mygraph = mkGraph genLNodes genLEdges
现在我想使用Dijkstra算法从一个节点到另一个节点(例如从 A
到 E
)找到最短路径。在 Data.Graph.Inductive.Query.SP
中似乎有一个可以实现这个功能的函数:
dijkstra :: (Graph gr, Real b) => Heap b (LPath b) -> gr a b -> LRTree b
但我无法从提供的界面中弄清如何使用它。如果有任何帮助,将不胜感激。此外,如果我正确地创建了有向加权图,或者是否有其他(更好的)包来实现它,我也想听听其他建议。
sp
这个名字太糟糕了 - 难怪你没注意到它! - AndrewC