kuvshinovdr / OGxx

Object-oriented graph algorithm library in C++ developed for educational purposes.
MIT License
1 stars 1 forks source link

make_tree #43

Open kuvshinovdr opened 1 year ago

kuvshinovdr commented 1 year ago
  1. Обновить свою ветку по ветке main (можно через rebase).
  2. Создать файл source/make_tree.cpp
  3. В нём в пространстве имён ogxx определить функцию:
    
    enum class Make_tree_directions
    {
    child_to_parent = 1,
    parent_to_child = 2,
    both = 3
    };

void make_tree(Graph_view& gv, Index_iterator_uptr parents, Make_tree_directions mtd);


которая добавляет в gv рёбра, строя дерево (или лес). Итератор parents перечисляет предков вершин (если предка нет, то он возвращает npos == -1) по порядку, начиная с нулевой вершины. Параметр mtd говорит, как ориентировать рёбра: если mtd == child_to_parent, то добавляем только рёбра от потомка к предку, если parent_to_child -- только от предка к потомку, если both -- добавляем оба (имеет смысл для ориентированных графов).

Пусть parents перечисляет значения 1, -1, 3, 1, тогда добавляются рёбра:
child_to_parent:  0-1, 2-3, 3-1, вершина 1 является корнем, поскольку у неё нет предка (в соответствующей позиции стоит -1);
parent_to_child:  1-0, 3-2, 1-3;
both: 0-1, 1-0, 2-3, 3-2, 3-1, 1-3.