Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/05/2016, 05:34
enrieto
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 1 mes
Puntos: 5
Respuesta: recursividad c++ hallar todas las posibles soluciones de la suma de un ve

Hola; tengo otra versión, casi tan espantosa como la de arriba :)

Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5.  
  6. using sstype = std::set<std::set<int>>;
  7.  
  8. sstype& permutar(std::vector<int> p, std::vector<int> f, int suma)
  9. {
  10.     static sstype ss;
  11.  
  12.     if(suma == std::accumulate(p.begin(), p.end(), 0)) {
  13.         ss.emplace(std::set<int>(p.begin(), p.end()));
  14.         return ss;
  15.     }
  16.  
  17.     for(size_t i = 0; i < f.size(); ++i) {
  18.         auto ppio = p;
  19.         ppio.push_back(f[i]);
  20.         auto fin = f;
  21.         fin.erase(fin.begin() + i);
  22.  
  23.         permutar(ppio, fin, suma);
  24.     }
  25.  
  26.     return ss;
  27. }
  28.  
  29. int main()
  30. {
  31.     std::vector<int> v{8, 2, 3, 3, 6, 4};
  32.     const int suma = 13;
  33.  
  34.     auto ss = permutar(std::vector<int>{}, v, suma);
  35.  
  36.     for(auto& i : ss) {
  37.         for(auto& j : i)
  38.             std::cout << j << ' ';
  39.         std::cout << '\n';
  40.     }
  41. }

Última edición por enrieto; 03/05/2016 a las 05:53