void DFS(int depth, vector<int> &result, int &num) { int n = result.size(); if(depth == n) ++num; else { for(int i=0; i<n; ++i) if(itemIsValid(result, depth, i)) { result[depth] = i; DFS(depth+1, result, num); } } }
void CoarsenClasses::insertEquivalenceClassItem( CoarsenClasses::Data& data, const std::shared_ptr<hier::PatchDescriptor>& descriptor) { if (!itemIsValid(data, descriptor)) { tbox::perr << "Invalid coarsen class data passed to " << "CoarsenClasses::insertEquivalenceClassItem\n"; printCoarsenItem(tbox::perr, data); TBOX_ERROR("Check entries..." << std::endl); } else { int eq_index = getEquivalenceClassIndex(data, descriptor); if (eq_index < 0) { eq_index = static_cast<int>(d_equivalence_class_indices.size()); d_equivalence_class_indices.resize(eq_index + 1); } data.d_class_index = eq_index; if (d_num_coarsen_items >= static_cast<int>(d_coarsen_classes_data_items.size())) { d_coarsen_classes_data_items.resize( d_num_coarsen_items + s_default_coarsen_item_array_size, Data(data.d_gcw_to_coarsen.getDim())); } d_coarsen_classes_data_items[d_num_coarsen_items] = data; d_equivalence_class_indices[eq_index].push_back(d_num_coarsen_items); ++d_num_coarsen_items; } }