7 Şubat 2018 Çarşamba

graph out_degree metodu

Giriş
Verilen vertex'ten dışarı kaç bağlantı olduğunu döndürür. Eğer sonuç 0 ise bu vertex leaf kabul edilir.

Örnek
Şöyle yaparız.
for (auto vd : boost::make_iterator_range(vertices(g)))
    std::cout << "vertex #" << vd << " has out_degree: " << out_degree(vd, g) << "\n";
Örnek
Şöyle yaparız.
using Graph = boost::adjacency_list<>;

using BranchID = int;
using BranchMap = std::vector<BranchID>; // maps vertex id -> branch id

// sample data
Graph g = ...;

// do the topo sort and distinguish branches
BranchMap mappings = map_branches(g);


#include <boost/graph/topological_sort.hpp>

std::vector<BranchID> map_branches(Graph const& g) {
  std::vector<Vertex> reverse_topo;
  boost::topological_sort(g, back_inserter(reverse_topo));

  // traverse the output to map to unique branch ids
  std::vector<BranchID> branch_map(num_vertices(g));

  BranchID branch_id = 0;

  for (auto v : reverse_topo) {
    auto degree = out_degree(v, g);
    if (0 == degree) // is leaf?
      ++branch_id;

    if (degree < 2) // "unique" path
      branch_map[v] = branch_id;
  }

  return branch_map;
}

Hiç yorum yok:

Yorum Gönder