void BppSolver::SeparateBranch(BranchNode& togetherNode, BranchNode& separateNode, TreeNodes& nodes)
{
	togetherNode.id = nbGeneratedNodes++; 
	nodes.push_back(togetherNode);

	separateNode.id = nbGeneratedNodes++;
	nodes.push_back(separateNode);
}
void BppSolver::TogetherBranch(BranchNode& togetherNode, BranchNode& separateNode, TreeNodes& nodes)
{
	separateNode.id = nbGeneratedNodes++;
	nodes.push_back(separateNode);

	togetherNode.id = nbGeneratedNodes++; // deepening on together branch;
	nodes.push_back(togetherNode);
}
Ejemplo n.º 3
0
setTreeNodes UnorderedTree::TreeComponents(TreeNodes *t,bool bCanonical=false){
    //Returns the components ( subtree of next level) of a tree
    setTreeNodes setTreeComponents;
    //Insert into a set, the components
    TreeNodes::iterator itTreeNodes;
    Integer level=(*t)[0];
    TreeNodes component;
    itTreeNodes=t->begin();
    int i=0;
	bool blnend=false;
    while(i<t->size() &&itTreeNodes!=t->end()) {
		//The components start at level 0, the canonical form no
		if (*itTreeNodes!=level) component.push_back( (*itTreeNodes)-(bCanonical ? 0 :level));
        ++itTreeNodes;i++;
        if (itTreeNodes==t->end()) 
			blnend=true;
		else if((*itTreeNodes)<= level+1 )
			blnend=true;
		if (blnend==true){
                  blnend=false;
				  if(component.size()>0){ 
					  setTreeComponents.insert(bCanonical ? CanonicalForm(component): component );
                          component.clear();   
                  }
        }                        
    }
    return setTreeComponents;       
}
Ejemplo n.º 4
0
TreeNodes UnorderedTree::CanonicalForm(TreeNodes t){
    //Returns recursively the CanonicalForm of a tree
    if (t.size()<2) return t;
    setTreeNodes setTreeComponents = TreeComponents(&t,true);
    Integer level=t[0]; 
  
    TreeNodes tn;
    tn.push_back(level);
    setTreeNodes::reverse_iterator itset;
    TreeNodes::iterator iteTreeNodes;
    for (itset=setTreeComponents.rbegin();itset!=setTreeComponents.rend();++itset){
        TreeNodes t1=(*itset);
        for (iteTreeNodes=t1.begin();iteTreeNodes!=t1.end();++iteTreeNodes){
            tn.push_back((*iteTreeNodes));
            }
            }
    return tn;   
}
Ejemplo n.º 5
0
TreeNodes UnorderedTree::SubtreeAtNode(TreeNodes *supertree,Integer *iNode){
    //Outputs the bigest bottom subtree rooted at iNode
    TreeNodes tn;
	int i=*iNode;
	int v=(*supertree)[i].depth;
	int init_depth=v;
	do {	
		tn.push_back(Node(v-init_depth,(*supertree)[i].label));
		i++;
		v=(*supertree)[i].depth;
	} while (v-init_depth>0 && i<supertree->size() );
	
    return CanonicalForm(tn);   
}