module Data.Graph.Inductive.Query.TransClos(
trc
) where
import Data.Graph.Inductive.Graph
import Data.Graph.Inductive.Query.DFS (reachable)
getNewEdges :: DynGraph gr => [LNodea] -> grab -> [LEdge()]
getNewEdgesvsg = concatMap (\(u,_)->rug) vs
where r = \ug' -> map (\v->(u,v,())) (reachableug')
{-|
Finds the transitive closure of a directed graph.
Given a graph G=(V,E), its transitive closure is the graph:
G* = (V,E*) where E*={(i,j): i,j in V and there is a path from i to j in G}
-}trc :: DynGraph gr =>grab -> gra()trcg = insEdges (getNewEdgeslng) (insNodeslnempty)
where ln = labNodesg