The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

# NAME

Graph::Weighted - A weighted graph implementation

version 0.9101

# SYNOPSIS

`````` use Graph::Weighted;

my \$gw = Graph::Weighted->new;
\$gw->populate(
[ [ 0,1,2,0,0 ], # Vertex 0 with 2 edges of weight 3
[ 1,0,3,0,0 ], #    "   1      2 "               4
[ 2,3,0,0,0 ], #    "   2      2 "               5
[ 0,0,1,0,0 ], #    "   3      1 "               1
[ 0,0,0,0,0 ], #    "   4      0 "               0
]
);
\$gw->dump;

my ( \$lightest, \$heaviest ) = \$gw->vertex_span;
( \$lightest, \$heaviest ) = \$gw->edge_span;

my \$attr = 'probability';
\$gw = Graph::Weighted->new;
\$gw->populate(
{
0 => { label => 'A', 1=>0.4, 3=>0.6 },
1 => { label => 'B', 0=>0.3, 2=>0.7 },
2 => { label => 'C', 0=>0.5, 2=>0.5 },
3 => { label => 'D', 0=>0.2, 1=>0.8 },
},
\$attr
);
\$gw->dump(\$attr);

my \$cost = \$gw->get_cost( [0, 1], \$attr );

\$cost = \$gw->path_cost( [0, 3, 1, 2], \$attr );

my \$tree = \$gw->MST_Kruskal;
my \$sum = \$gw->MST_edge_sum(\$tree);``````

# DESCRIPTION

A `Graph::Weighted` object is a subclass of the Graph module with attribute handling. As such, all of the Graph methods may be used.

# METHODS

## new

``````  my \$gw = Graph::Weighted->new;
my \$gw = Graph::Weighted->new(%arguments);``````

Return a new `Graph::Weighted` object.

Please see "Constructors" in Graph for the possible constructor arguments.

## populate

``````  \$gw->populate(\$matrix);
\$gw->populate(\$matrix, \$attribute);
\$gw->populate(\@vectors);
\$gw->populate(\@vectors, \$attribute);
\$gw->populate(\%data_points);
\$gw->populate(\%data_points, \$attribute);``````

Populate a graph with weighted nodes and edges.

The data can be an arrayref of numeric vectors, a `Math::Matrix` object, a `Math::MatrixReal` object, or a hashref of node-edge values.

Data given as a hash reference may also contain node labels. Also, the keys need not be numeric, just unique.

The optional `attribute` argument is a string with the default `weight`.

## get_cost

``````  \$c = \$gw->get_cost(\$vertex);
\$c = \$gw->get_cost(\$vertex, \$attribute);
\$c = \$gw->get_cost(\@edge);
\$c = \$gw->get_cost(\@edge, \$attribute);``````

Return the named attribute value for the vertex or edge. If no attribute name is given, the string `weight` is used.

## vertex_span

`````` (\$lightest, \$heaviest) = \$gw->vertex_span;
(\$lightest, \$heaviest) = \$gw->vertex_span(\$attr);``````

Return the lightest and heaviest vertices as array references.

## edge_span

`````` (\$lightest, \$heaviest) = \$gw->edge_span;
(\$lightest, \$heaviest) = \$gw->edge_span(\$attr);``````

Return the lightest and heaviest edges as array references.

## path_cost

`````` \$c = \$gw->path_cost(\@vertices);
\$c = \$gw->path_cost(\@vertices, \$attr);``````

Return the summed weight (or cost attribute) of the path edges.

## MST_edge_sum

``  \$sum = \$gw->MST_edge_sum(\$tree);``

Compute the sum of the edges of a minimum-spanning-tree.

## dump

``````  \$gw->dump
\$gw->dump(\$attr)``````

Print out the graph showing vertices, edges and costs.

Graph, the parent of this module

Graph::Easy::Weighted, the sibling

The eg/* and t/* programs in this distribution

# AUTHOR

Gene Boggs <gene@cpan.org>