Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/05/2016, 07:10
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

[Edito], y si queda algo pasa para la versión beta.

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