Provided by: libgraph-perl_0.96-1.1_all bug

SYNOPSIS

           use Graph::TransitiveClosure;
           use Graph::Directed; # or Undirected

           my $g  = Graph::Directed->new;
           $g->add_...(); # build $g

           # Compute the transitive closure graph.
           my $tcg = Graph::TransitiveClosure->new($g);
           $tcg->is_reachable($u, $v) # Identical to $tcg->has_edge($u, $v)

           # Being reflexive is the default, meaning that null transitions
           # (transitions from a vertex to the same vertex) are included.
           my $tcg = Graph::TransitiveClosure->new($g, reflexive => 1);
           my $tcg = Graph::TransitiveClosure->new($g, reflexive => 0);

           # is_reachable(u, v) is always reflexive.
           $tcg->is_reachable($u, $v)

           # The reflexivity of is_transitive(u, v) depends of the reflexivity
           # of the transitive closure.
           $tcg->is_transitive($u, $v)

           # You can check any graph for transitivity.
           $g->is_transitive()

           my $tcg = Graph::TransitiveClosure->new($g, path_length => 1);
           $tcg->path_length($u, $v)

           # path_vertices is automatically always on so this is a no-op.
           my $tcg = Graph::TransitiveClosure->new($g, path_vertices => 1);
           $tcg->path_vertices($u, $v)

           # Both path_length and path_vertices.
           my $tcg = Graph::TransitiveClosure->new($g, path => 1);
           $tcg->path_vertices($u, $v)
           $tcg->length($u, $v)

           my $tcg = Graph::TransitiveClosure->new($g, attribute_name => 'length');
           $tcg->path_length($u, $v)

DESCRIPTION

       You can use "Graph::TransitiveClosure" to compute the transitive closure graph of a graph
       and optionally also the minimum paths (lengths and vertices) between vertices, and after
       that query the transitiveness between vertices by using the "is_reachable()" and
       "is_transitive()" methods, and the paths by using the "path_length()" and
       "path_vertices()" methods.

       For further documentation, see the Graph::TransitiveClosure::Matrix.

   Class Methods
       new($g, %opt)
           Construct a new transitive closure object.  Note that strictly speaking the returned
           object is not a graph; it is a graph plus other stuff.  But you should be able to use
           it as a graph plus a couple of methods inherited from the
           Graph::TransitiveClosure::Matrix class.

   Object Methods
       These are only the methods 'native' to the class: see Graph::TransitiveClosure::Matrix for
       more.

       is_transitive($g)
           Return true if the Graph $g is transitive.

       transitive_closure_matrix
           Return the transitive closure matrix of the transitive closure object.

   INTERNALS
       The transitive closure matrix is stored as an attribute of the graph called "_tcm", and
       any methods not found in the graph class are searched in the transitive closure matrix
       class.