summaryrefslogtreecommitdiff
path: root/src/Collapse/example/edge_collapse_basic_example.cpp
blob: ac21e96f4d17722c370f170ef91a8be44df2345c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <gudhi/Flag_complex_edge_collapser.h>

#include <iostream>
#include <vector>

int main() {
  // Type definitions
  using Filtration_value = float;
  using Vertex_handle = short;
  using Flag_complex_edge_collapser = Gudhi::collapse::Flag_complex_edge_collapser<Vertex_handle, Filtration_value>;
  using Filtered_edge = Flag_complex_edge_collapser::Filtered_edge;
  using Filtered_edge_list = std::vector<Filtered_edge>;
  using Edge = Flag_complex_edge_collapser::Edge;

  //  1   2
  //  o---o
  //  |\ /|
  //  | x |
  //  |/ \|
  //  o---o
  //  0   3
  Filtered_edge_list graph = {{{0, 1}, 1.},
                              {{1, 2}, 1.},
                              {{2, 3}, 1.},
                              {{3, 0}, 1.},
                              {{0, 2}, 2.},
                              {{1, 3}, 2.}};

  Flag_complex_edge_collapser edge_collapser(graph.begin(), graph.end());

  Filtered_edge_list remaining_edges;
  // Retrieve collapse edges from the output iterator
  edge_collapser.process_edges(
    [&remaining_edges](std::pair<Vertex_handle, Vertex_handle> edge, Filtration_value filtration) {
        remaining_edges.emplace_back(Filtered_edge(edge, filtration));
      });

  for (Filtered_edge filtered_edge_from_collapse : remaining_edges) {
    Edge edge_from_collapse = std::get<0>(filtered_edge_from_collapse);
    std::cout << "fn[" << std::get<0>(edge_from_collapse) << ", " << std::get<1>(edge_from_collapse) << "] = "
              << std::get<1>(filtered_edge_from_collapse) << std::endl;
  }

  return 0;
}