Używam Funkcjonalnej biblioteki wykresów (FGL) firmy Martin Erwig do przedstawienia następującego prostego, wyważonego, ważonego wykresu.Wyszukiwanie najkrótszej ścieżki z 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
Teraz chcę znaleźć najkrótszą drogę od jednego węzła do drugiego np A
do E
przy użyciu algorytmu dijkstry. Wydaje się, że funkcja to zrobić w Data.Graph.Inductive.Query.SP
:
dijkstra :: (Graph gr, Real b) => Heap b (LPath b) -> gr a b -> LRTree b
Ale nie jestem w stanie dowiedzieć się, jak z niego korzystać z interfejsu usług. Każda pomoc byłaby bardzo cenna. Chciałbym również usłyszeć inne sugestie, jeśli tworzę odpowiednio ukierunkowany wykres ważony, czy jest jakikolwiek inny (lepszy) pakiet, aby to zrobić?
... i prawdopodobnie warto przeczytać [artykuł] (http://web.engr.oregonstate.edu/~erwig/papers/InductiveGraphs_JFP01.pdf) lub przynajmniej je przeglądać. – AndrewC
@vis 'sp' to i tak nazwa śmieci - nic dziwnego, że go nie zauważyłeś! – AndrewC
Ups, całkowicie przegapiłem tę funkcję! w rzeczywistości to wszystko, czego potrzebowałem. @AndrewC dzięki za skierowanie mnie na papier. – vis