Advertisement
mfgnik

Untitled

Nov 19th, 2020
581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <vector>
  4.  
  5. std::vector<int> NextPermutation(std::vector<int> permutation, size_t len) {
  6.     size_t k = len - 2;
  7.     while (permutation[k] > permutation[k + 1]) {
  8.         --k;
  9.     }
  10.     size_t t = k + 1;
  11.     while (t < len - 1 && permutation[t + 1] > permutation[k]) {
  12.         ++t;
  13.     }
  14.     int temp = permutation[k];
  15.     permutation[k] = permutation[t];
  16.     permutation[t] = temp;
  17.     while (k + 1 < len - 1) {
  18.         temp = permutation[k + 1];
  19.         permutation[k + 1] = permutation[len - 1];
  20.         permutation[len - 1] = temp;
  21.         ++k;
  22.         --len;
  23.     }
  24.     return permutation;
  25. }
  26.  
  27. std::vector<std::vector<int>> GeneratePermutations(size_t len) {
  28.     if (len == 1) {
  29.         return {{0}};
  30.     }
  31.     std::vector<std::vector<int>> permutations;
  32.     std::vector<int> permutation, last_permutation, next_permutation;
  33.     for (size_t i = 0; i < len; ++i) {
  34.         permutation.push_back(static_cast<int>(i));
  35.         last_permutation.push_back(static_cast<int>(len - i - 1));
  36.     }
  37.     permutations.push_back(permutation);
  38.     do {
  39.         permutation = NextPermutation(permutation, len);
  40.         permutations.push_back(permutation);
  41.     } while (permutation != last_permutation);
  42.     return permutations;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement