Tôi đang sử dụng Thư viện đồ thị chức năng của Martin Erwig (FGL) để biểu thị biểu đồ có trọng số chỉ đạo đơn giản sau đây.Tìm đường đi ngắn nhất với FGL
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
Bây giờ tôi muốn tìm ra con đường ngắn nhất từ nút này sang nút ví dụ khác A
đến E
bằng thuật toán dijkstra. Dường như có một chức năng để làm điều đó trong Data.Graph.Inductive.Query.SP
:
dijkstra :: (Graph gr, Real b) => Heap b (LPath b) -> gr a b -> LRTree b
Nhưng tôi không thể tìm ra cách để sử dụng nó từ giao diện được cung cấp. Bất kì sự trợ giúp nào đều được đánh giá cao. Tôi cũng muốn nghe bất kỳ đề xuất nào khác, nếu tôi tạo biểu đồ có trọng số trực tiếp đúng cách hoặc nếu có bất kỳ gói nào khác (tốt hơn) để làm như vậy?
... và có thể đáng đọc [giấy] (http://web.engr.oregonstate.edu/~erwig/papers/InductiveGraphs_JFP01.pdf) hoặc ít nhất là lướt qua nó. – AndrewC
@vis 'sp' là một cái tên rác rưởi - không có gì lạ khi bạn không phát hiện ra nó! – AndrewC
Rất tiếc, tôi đã hoàn toàn bỏ lỡ chức năng đó! thực sự đó là tất cả những gì tôi cần. @AndrewC cảm ơn vì đã chỉ cho tôi bài viết. – vis