Copyright | (c) The University of Glasgow 2002 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | [email protected] |
Stability | experimental |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell98 |
A version of the graph algorithms described in:
Structuring Depth-First Search Algorithms in Haskell, by David King and John Launchbury.
:: Ord key | |
=> [(node, key, [key])] | The graph: a list of nodes uniquely identified by keys, with a list of keys of nodes this node has edges to. The out-list may contain keys that don't correspond to nodes of the graph; such edges are ignored. |
-> [SCC node] |
The strongly connected components of a directed graph, topologically sorted.
:: Ord key | |
=> [(node, key, [key])] | The graph: a list of nodes uniquely identified by keys, with a list of keys of nodes this node has edges to. The out-list may contain keys that don't correspond to nodes of the graph; such edges are ignored. |
-> [SCC (node, key, [key])] | Topologically sorted |
The strongly connected components of a directed graph, topologically sorted. The function is the same as stronglyConnComp
, except that all the information about each node retained. This interface is used when you expect to apply SCC
to (some of) the result of SCC
, so you don't want to lose the dependency information.
Strongly connected component.
AcyclicSCC vertex | A single vertex that is not in any cycle. |
CyclicSCC [vertex] | A maximal set of mutually reachable vertices. |
flattenSCC :: SCC vertex -> [vertex] Source
The vertices of a strongly connected component.
flattenSCCs :: [SCC a] -> [a] Source
The vertices of a list of strongly connected components.
type Graph = Table [Vertex] Source
Adjacency list representation of a graph, mapping each vertex to its list of successors.
type Table a = Array Vertex a Source
Table indexed by a contiguous set of vertices.
type Bounds = (Vertex, Vertex) Source
The bounds of a Table
.
type Edge = (Vertex, Vertex) Source
An edge from the first vertex to the second.
Abstract representation of vertices.
graphFromEdges :: Ord key => [(node, key, [key])] -> (Graph, Vertex -> (node, key, [key]), key -> Maybe Vertex) Source
Build a graph from a list of nodes uniquely identified by keys, with a list of keys of nodes this node should have edges to. The out-list may contain keys that don't correspond to nodes of the graph; they are ignored.
graphFromEdges' :: Ord key => [(node, key, [key])] -> (Graph, Vertex -> (node, key, [key])) Source
Identical to graphFromEdges
, except that the return value does not include the function which maps keys to vertices. This version of graphFromEdges
is for backwards compatibility.
buildG :: Bounds -> [Edge] -> Graph Source
Build a graph from a list of edges.
transposeG :: Graph -> Graph Source
The graph obtained by reversing all edges.
vertices :: Graph -> [Vertex] Source
All vertices of a graph.
edges :: Graph -> [Edge] Source
All edges of a graph.
outdegree :: Graph -> Table Int Source
A table of the count of edges from each node.
indegree :: Graph -> Table Int Source
A table of the count of edges into each node.
dfs :: Graph -> [Vertex] -> Forest Vertex Source
A spanning forest of the part of the graph reachable from the listed vertices, obtained from a depth-first search of the graph starting at each of the listed vertices in order.
dff :: Graph -> Forest Vertex Source
A spanning forest of the graph, obtained from a depth-first search of the graph starting from each vertex in an unspecified order.
topSort :: Graph -> [Vertex] Source
A topological sort of the graph. The order is partially specified by the condition that a vertex i precedes j whenever j is reachable from i but not vice versa.
components :: Graph -> Forest Vertex Source
The connected components of a graph. Two vertices are connected if there is a path between them, traversing edges in either direction.
scc :: Graph -> Forest Vertex Source
The strongly connected components of a graph.
bcc :: Graph -> Forest [Vertex] Source
The biconnected components of a graph. An undirected graph is biconnected if the deletion of any vertex leaves it connected.
reachable :: Graph -> Vertex -> [Vertex] Source
A list of vertices reachable from a given vertex.
path :: Graph -> Vertex -> Vertex -> Bool Source
Is the second vertex reachable from the first?
module Data.Tree
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/containers-0.5.6.2/Data-Graph.html