void BudgetedStrategy::FindClusters() { clusters.clear(); int cn = -1; for(int i=0; i<s; i++) for(int j=0; j<s; j++) { GetNode(i,j)->extra_info = false; } for(int i=0; i<s; i++) { for(int j=0; j<s; j++) { if(!(!GetNode(i,j)->extra_info && GetNode(i,j)->p_X > 0.99)) continue; std::vector<CNode*> stack; stack.push_back(GetNode(i,j)); cn++; if(c.size() < cn+1) { c.push_back(makeVector(RAND(0,1), RAND(0,1), RAND(0,1))); } while(!stack.empty()) { CNode* nd = stack.back(); stack.pop_back(); nd->extra_info = true; nd->colorBasis = c[cn]; nd->label = cn; clusters.insert(std::pair<int, CNode*>(cn, nd)); for(int i=1; i<5; i++) { CNode * ne = nd->GetNeighbourLeaf(i==1,i==2,i==3,i==4); if( ne && !ne->extra_info && ne->p_X > 0.99) { ne->extra_info = true; stack.push_back(ne); } } } } } cluster_n = cn+1; FindConvexHulls(); }