Skip to content

Commit 441f02d

Browse files
committed
Scaffold Dijkstra
1 parent 25ed1af commit 441f02d

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

17.graph.hs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import Data.Sequence (Seq(..), fromList, (><))
99
main :: IO ()
1010
main = interact $ unlines . demo . parse
1111
where
12-
demo grid = concat [ddfs grid, dbfs grid]
12+
demo grid = concatMap ($ grid) [ddfs, dbfs, dsp]
1313
ddfs grid = dfs grid (0, 0) (visitor "dfs")
1414
dbfs grid = bfs grid (0, 0) (visitor "bfs")
15+
dsp grid = let end = maxNode grid
16+
(r, zs) = dijkstra grid (0, 0) end (visitor "shortest-path")
17+
in zs ++ ["shortest-path result " ++ show r]
1518

1619
type Node = (Int, Int)
1720
data Grid a = Grid { items :: M.Map Node a, maxNode :: Node } deriving Show
@@ -48,3 +51,7 @@ bfs grid@Grid { items } start visitor = go (Empty :|> start) S.empty
4851
go (xs :|> x) seen | S.member x seen = go xs seen
4952
go (xs :|> x) seen = visit x : go ys (S.insert x seen)
5053
where ys = (fromList $ neighbours grid x) >< xs
54+
55+
-- Find the shortest path from start, to end, using Dijkstra's algorithm.
56+
dijkstra :: Grid a -> Node -> Node -> (Node -> a -> b) -> (Int, [b])
57+
dijkstra grid@Grid { items } start end visitor = (0, [])

0 commit comments

Comments
 (0)