예제 #1
0
 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);
             }
     }
 }
예제 #2
0
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;
   }

}