dfs empty vs == [] dfs (edge 1 1) [1] == [1] dfs (edge 1 2) [0] == [] dfs (edge 1 2) [1] == [1,2] dfs (edge 1 2) [2] == [2] dfs (edge 1 2) [1,2] == [1,2] dfs (edge 1 2) [2,1] == [2,1] dfs x [] == [] and [ hasVertex v x | v <- dfs x vs ] == True dfs (3 * (1 + 4) * (1 + 5)) [1,4] == [1,5,4] dfs (circuit [1..5] + circuit [5,4..1]) [3] == [3,2,1,5,4]
dfs empty vs == [] dfs (edge 1 1) [1] == [1] dfs (edge 1 2) [0] == [] dfs (edge 1 2) [1] == [1,2] dfs (edge 1 2) [2] == [2] dfs (edge 1 2) [1,2] == [1,2] dfs (edge 1 2) [2,1] == [2,1] dfs x [] == [] and [ hasVertex v x | v <- dfs x vs ] == True dfs (3 * (1 + 4) * (1 + 5)) [1,4] == [1,5,4] dfs (circuit [1..5] + circuit [5,4..1]) [3] == [3,2,1,5,4]
dfs == Algebra.Graph.AdjacencyMap.dfs . toAdjacencyMap
(%) :: Ord a => (GraphKL a -> b) -> AdjacencyMap a -> b f % x = f (fromAdjacencyMap x)for greater clarity.
dfs % edge 1 1 $ [1] == [1] dfs % edge 1 2 $ [0] == [] dfs % edge 1 2 $ [1] == [1,2] dfs % edge 1 2 $ [2] == [2] dfs % edge 1 2 $ [1,2] == [1,2] dfs % edge 1 2 $ [2,1] == [2,1] dfs % x $ [] == [] dfs % (3 * (1 + 4) * (1 + 5)) $ [1,4] == [1,5,4] and [ hasVertex v x | v <- dfs % x $ vs ] == True
>>> import qualified Data.Map as Map
>>> graph = Map.fromList [(1, [2, 3]), (2, [4]), (3, [4]), (4, [])]
>>> dfs (graph Map.!) (== 4) 1 Just [3,4]
>>> runG example $ \g@G{..} -> fmap3 gFromVertex $ dfs g <$> gToVertex 'x' Right (Just ["xde","xe"])