41 #include <LEP/mcb/util.h> 44 #include <LEDA/graph/graph.h> 45 #include <LEDA/numbers/integer.h> 46 #include <LEDA/numbers/integer_matrix.h> 48 #include <LEDA/graph.h> 49 #include <LEDA/integer.h> 50 #include <LEDA/integer_matrix.h> 57 #if defined(LEDA_NAMESPACE) 62 using leda::integer_matrix;
91 template<
class Container>
93 const array<Container>& cb,
99 leda::error_handler(999,
"determinant: cycle space dimension is zero!");
101 if ( B.dim1() != N || B.dim2() != N )
102 leda::error_handler(999,
"determinant: matrix has wrong dimensions!");
104 array< mcb::spvecfp > oriented_cb ( N );
105 CycleOrienter<Container> orienter( g, enumb );
106 for(
int i = 0; i < N; ++i )
107 oriented_cb[i] = orienter( cb[i] );
109 cycle_matrix<mcb::spvecfp>( g, oriented_cb, enumb, B );
113 void cycle_matrix<mcb::spvecfp> (
const graph& g,
114 const array<mcb::spvecfp>& cb,
118 int N = enumb.dim_cycle_space();
120 leda::error_handler(999,
"cycle_matrix: cycle space dimension is zero!");
122 if ( B.dim1() != N || B.dim2() != N )
123 leda::error_handler(999,
"cycle_matrix: matrix must have dimension NxN!");
125 for(
int i = 0; i < N; ++i ) {
126 leda::list_item it = cb[i].first();
129 int index = cb[i].index(it);
130 if( ! enumb.tree( enumb( index ) ) )
132 B[i][index] = cb[i].inf(it);
161 template<
class Container>
163 const array< Container >& cb,
169 leda::error_handler(999,
"determinant: cycle space dimension is zero!");
171 integer_matrix B( N, N );
172 cycle_matrix<Container>( g, cb, enumb, B );
176 leda::error_handler(999,
"determinant: not a directed cycle basis!");
185 #endif // DETERMINANT_H
Definition of edge numbering.
An edge numbering class.
Definition: edge_num.h:75
The main package namespace.
std::ostream & output_maple_format(std::ostream &out, const integer_matrix &B)
Output a LEDA integer_matrix in a format compatible with maple.
leda::integer determinant(const graph &g, const array< Container > &cb, const mcb::edge_num &enumb)
Compute the determinant of a cycle basis.
Definition: determinant.h:162
void cycle_matrix(const graph &g, const array< Container > &cb, const mcb::edge_num &enumb, integer_matrix &B)
Compute the cycle matrix of a cycle basis.
Definition: determinant.h:92
int dim_cycle_space() const
Definition: edge_num.h:140