Dijkstra's algorithm: Difference between revisions

Content added Content deleted
(added haskell)
Line 750: Line 750:
| otherwise = aux (previous ! vertex) (vertex : acc)
| otherwise = aux (previous ! vertex) (vertex : acc)


adj_list :: Array Int [(Int, Int)]
adj_list :: Array Char [(Char, Int)]
adj_list = listArray (0, 5) [ [(1,7), (2,9), (5,14)],
adj_list = listArray ('a', 'f') [ [('b',7), ('c',9), ('f',14)],
[(0,7), (2,10), (3,15)],
[('a',7), ('c',10), ('d',15)],
[(0,9), (1,10), (3,11), (5,2)],
[('a',9), ('b',10), ('d',11), ('f',2)],
[(1,15), (2,11), (4,6)],
[('b',15), ('c',11), ('e',6)],
[(3,6), (5,9)],
[('d',6), ('f',9)],
[(0,14), (2,2), (4,9)] ]
[('a',14), ('c',2), ('e',9)] ]


main :: IO ()
main :: IO ()
main = do
main = do
let (min_distance, previous) = dijkstra 0 (-1) adj_list
let (min_distance, previous) = dijkstra 'a' ' ' adj_list
putStrLn $ "Distance from 0 to 4: " ++ show (min_distance ! 4)
putStrLn $ "Distance from a to e: " ++ show (min_distance ! 'e')
let path = shortest_path_to 4 (-1) previous
let path = shortest_path_to 'e' ' ' previous
putStrLn $ "Path: " ++ show path</lang>
putStrLn $ "Path: " ++ show path</lang>