X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=src%2Fcomponenttree.cpp;h=f28c7eed83efbf03f1c966db5729526d1101fbeb;hb=c997c8f4931cde3ede1b51905c10c4d9c442e630;hp=5832c3683bcda2ebee8970220a6b60a7906e5ccc;hpb=35ac6a57e0314a8c557f327ec540415ff20bc2dc;p=germs.git diff --git a/src/componenttree.cpp b/src/componenttree.cpp index 5832c36..f28c7ee 100644 --- a/src/componenttree.cpp +++ b/src/componenttree.cpp @@ -20,7 +20,6 @@ #include "componenttree.h" -#include using namespace std; ComponentTree::Node::Node(Node* parent, Component comp): _parent(parent), _comp(comp){ @@ -80,6 +79,7 @@ void ComponentTree::makeUnoriented(){ _root->_children.clear(); delete _root; _root = n; + _root->_parent = 0; } } @@ -115,3 +115,32 @@ size_t ComponentTree::countLeaves(Node* n){ } return leaves; } + +void ComponentTree::branches (Node* n, map & b){ + if (n->_children.empty() && n->_parent != 0){ + Node* p = n; + while (p->_parent != 0 && p->_children.size() < 2) + p = p->_parent; + ++b[p]; + return; + } + for (vector::iterator c = n->_children.begin(); + c != n->_children.end(); ++c){ + branches(*c,b); + } +} + +size_t ComponentTree::shortBranches(){ + map br; + branches(_root,br); + if (_root->_children.size() < 2 && _root->_comp.sign != 0){ + br[_root]++; + } + size_t sb = 0; + for (map::iterator b = br.begin(); b != br.end(); ++b){ + if (b->second == 1) + ++sb; + } + return sb; +} +