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"])
forest $ dfsForest empty == empty forest $ dfsForest (edge 1 1) == vertex 1 forest $ dfsForest (edge 1 2) == edge 1 2 forest $ dfsForest (edge 2 1) == vertices [1,2] isSubgraphOf (forest $ dfsForest x) x == True isDfsForestOf (dfsForest x) x == True dfsForest . forest . dfsForest == dfsForest dfsForest (vertices vs) == map (\v -> Node v []) (nub $ sort vs) dfsForest $ 3 * (1 + 4) * (1 + 5) == [ Node { rootLabel = 1 , subForest = [ Node { rootLabel = 5 , subForest = [] }]} , Node { rootLabel = 3 , subForest = [ Node { rootLabel = 4 , subForest = [] }]}] forest (dfsForest $ circuit [1..5] + circuit [5,4..1]) == path [1,2,3,4,5]
forest $ dfsForestFrom empty vs == empty forest $ dfsForestFrom (edge 1 1) [1] == vertex 1 forest $ dfsForestFrom (edge 1 2) [0] == empty forest $ dfsForestFrom (edge 1 2) [1] == edge 1 2 forest $ dfsForestFrom (edge 1 2) [2] == vertex 2 forest $ dfsForestFrom (edge 1 2) [1,2] == edge 1 2 forest $ dfsForestFrom (edge 1 2) [2,1] == vertices [1,2] isSubgraphOf (forest $ dfsForestFrom x vs) x == True isDfsForestOf (dfsForestFrom x (vertexList x)) x == True dfsForestFrom x (vertexList x) == dfsForest x dfsForestFrom x [] == [] dfsForestFrom (3 * (1 + 4) * (1 + 5)) [1,4] == [ Node { rootLabel = 1 , subForest = [ Node { rootLabel = 5 , subForest = [] } , Node { rootLabel = 4 , subForest = [] }] forest $ dfsForestFrom (circuit [1..5] + circuit [5,4..1]) [3] == path [3,2,1,5,4]
forest $ dfsForest empty == empty forest $ dfsForest (edge 1 1) == vertex 1 forest $ dfsForest (edge 1 2) == edge 1 2 forest $ dfsForest (edge 2 1) == vertices [1,2] isSubgraphOf (forest $ dfsForest x) x == True isDfsForestOf (dfsForest x) x == True dfsForest . forest . dfsForest == dfsForest dfsForest (vertices vs) == map (\v -> Node v []) (nub $ sort vs) dfsForest $ 3 * (1 + 4) * (1 + 5) == [ Node { rootLabel = 1 , subForest = [ Node { rootLabel = 5 , subForest = [] }]} , Node { rootLabel = 3 , subForest = [ Node { rootLabel = 4 , subForest = [] }]}] forest (dfsForest $ circuit [1..5] + circuit [5,4..1]) == path [1,2,3,4,5]
forest $ dfsForestFrom empty vs == empty forest $ dfsForestFrom (edge 1 1) [1] == vertex 1 forest $ dfsForestFrom (edge 1 2) [0] == empty forest $ dfsForestFrom (edge 1 2) [1] == edge 1 2 forest $ dfsForestFrom (edge 1 2) [2] == vertex 2 forest $ dfsForestFrom (edge 1 2) [1,2] == edge 1 2 forest $ dfsForestFrom (edge 1 2) [2,1] == vertices [1,2] isSubgraphOf (forest $ dfsForestFrom x vs) x == True isDfsForestOf (dfsForestFrom x (vertexList x)) x == True dfsForestFrom x (vertexList x) == dfsForest x dfsForestFrom x [] == [] dfsForestFrom (3 * (1 + 4) * (1 + 5)) [1,4] == [ Node { rootLabel = 1 , subForest = [ Node { rootLabel = 5 , subForest = [] } , Node { rootLabel = 4 , subForest = [] }] forest $ dfsForestFrom (circuit [1..5] + circuit [5,4..1]) [3] == path [3,2,1,5,4]