fork(1) download
  1. #include <algorithm>
  2. #include <functional>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. void permutationUtilInner(std::vector<int> v, std::function<void (const std::vector<int>&)> f)
  7. {
  8. do {
  9. f(v);
  10. } while (std::next_permutation(v.begin(), v.end()));
  11. }
  12.  
  13. void permutationUtil(std::vector<int> v, std::size_t r, std::function<void (const std::vector<int>&)> f)
  14. {
  15. std::vector<bool> b(v.size() - r, false);
  16. b.resize(v.size(), true);
  17.  
  18. std::sort(v.begin(), v.end());
  19. do {
  20. std::vector<int> sub;
  21.  
  22. for (std::size_t i = 0; i != b.size(); ++i) {
  23. if (b[i]) {
  24. sub.push_back(v[i]);
  25. }
  26. }
  27. permutationUtilInner(sub, f);
  28. } while (std::next_permutation(b.begin(), b.end()));
  29. }
  30.  
  31. void print_vector(const std::vector<int>& v)
  32. {
  33. const char* sep = "";
  34. std::cout << '{';
  35. for (const auto e : v) {
  36. std::cout << sep << e;
  37. sep = ", ";
  38. }
  39. std::cout << "}\n";
  40. }
  41.  
  42.  
  43. int main()
  44. {
  45. permutationUtil({1, 2, 3, 4}, 3, &print_vector);
  46. }
Success #stdin #stdout 0s 3420KB
stdin
Standard input is empty
stdout
{2, 3, 4}
{2, 4, 3}
{3, 2, 4}
{3, 4, 2}
{4, 2, 3}
{4, 3, 2}
{1, 3, 4}
{1, 4, 3}
{3, 1, 4}
{3, 4, 1}
{4, 1, 3}
{4, 3, 1}
{1, 2, 4}
{1, 4, 2}
{2, 1, 4}
{2, 4, 1}
{4, 1, 2}
{4, 2, 1}
{1, 2, 3}
{1, 3, 2}
{2, 1, 3}
{2, 3, 1}
{3, 1, 2}
{3, 2, 1}