CMR  1.3.0
matroid_separate.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 namespace tu
4 {
5 
6  template <typename MatroidType, typename MatrixType>
7  void matroid_separate(MatroidType& matroid, MatrixType& matrix, const int type, const std::pair <size_t, size_t>& split,
8  integer_matroid& upper_left_matroid, integer_matrix& upper_left_matrix, integer_matroid& lower_right_matroid,
9  integer_matrix& lower_right_matrix)
10  {
11  if (type == 1)
12  {
14  upper_left_matroid.resize(split.first, split.second);
15  upper_left_matrix.resize(split.first, split.second, false);
16  for (size_t row = 0; row < split.first; ++row)
17  upper_left_matroid.name1(row) = matroid.name1(row);
18  for (size_t column = 0; column < split.second; ++column)
19  upper_left_matroid.name2(column) = matroid.name2(column);
20  for (size_t row = 0; row < split.first; ++row)
21  {
22  for (size_t column = 0; column < split.second; ++column)
23  upper_left_matrix(row, column) = matrix(row, column);
24  }
25 
27  lower_right_matroid.resize(matroid.size1() - split.first, matroid.size2() - split.second);
28  lower_right_matrix.resize(matrix.size1() - split.first, matrix.size2() - split.second);
29  for (size_t row = 0; row < lower_right_matroid.size1(); ++row)
30  lower_right_matroid.name1(row) = matroid.name1(split.first + row);
31  for (size_t column = 0; column < lower_right_matroid.size2(); ++column)
32  lower_right_matroid.name2(column) = matroid.name2(split.second + column);
33  for (size_t row = 0; row < lower_right_matrix.size1(); ++row)
34  {
35  for (size_t column = 0; column < lower_right_matrix.size2(); ++column)
36  lower_right_matrix(row, column) = matrix(split.first + row, split.second + column);
37  }
38  }
39  else
40  {
41  throw std::logic_error("Not yet implemented!");
42  }
43  }
44 
45 } /* namespace tu */
Definition: matroid.hpp:22
void resize(size_t size1, size_t size2)
Definition: matroid.hpp:63
size_t size1() const
Definition: matroid.hpp:77
size_t size2() const
Definition: matroid.hpp:86
name_type & name2(size_t index)
Definition: matroid.hpp:116
name_type & name1(size_t index)
Definition: matroid.hpp:96
Definition: algorithm.hpp:14
void matroid_separate(MatroidType &matroid, MatrixType &matrix, const int type, const std::pair< size_t, size_t > &split, integer_matroid &upper_left_matroid, integer_matrix &upper_left_matrix, integer_matroid &lower_right_matroid, integer_matrix &lower_right_matrix)
Definition: matroid_separate.hpp:7
boost::numeric::ublas::matrix< long long > integer_matrix
Definition: common.hpp:27