Uso la libreria di grafici funzionale (FGL) di Martin Erwig per rappresentare il seguente grafico ponderato diretto semplice.Trovare il percorso più breve con 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
Ora voglio trovare il percorso più breve da un nodo all'altro per esempio A
a E
usando l'algoritmo di dijkstra. Sembra che ci sia una funzione di farlo in Data.Graph.Inductive.Query.SP
:
dijkstra :: (Graph gr, Real b) => Heap b (LPath b) -> gr a b -> LRTree b
ma non sono in grado di capire come usarlo dall'interfaccia fornita. Qualsiasi aiuto sarebbe molto apprezzato. Mi piacerebbe anche sentire altri suggerimenti, se sto creando il grafico ponderato diretto nel modo giusto, o se c'è qualche altro (migliore) pacchetto per farlo?
... e probabilmente vale la pena leggere [carta] (http://web.engr.oregonstate.edu/~erwig/papers/InductiveGraphs_JFP01.pdf) o almeno sfiorarlo. – AndrewC
@vis 'sp' è comunque un nome spazzatura - non c'è da meravigliarsi se non l'hai notato! – AndrewC
Oops Ho perso totalmente quella funzione! in effetti è tutto ciò di cui avevo bisogno. @AndrewC grazie per avermi indirizzato al giornale. – vis