RosettaCodeData/Task/Floyd-Warshall-algorithm/Haskell/floyd-warshall-algorithm-4.hs

11 lines
382 B
Haskell
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
floydWarshall v dist = foldr innerCycle (Just <$> dist) v
where
innerCycle k dist = (newDist <$> v <*> v) `setTo` dist
where
newDist i j =
((i,j), do a <- join $ lookup (i, k) dist
b <- join $ lookup (k, j) dist
return $ Shortest (distance a <> distance b) (path a))
setTo = unionWith (<>) . fromList