fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. void nextPartialPerm(std::vector<int> &z, int n1, int m1) {
  6.  
  7. int p1 = m1 + 1;
  8.  
  9. while (p1 <= n1 && z[m1] >= z[p1])
  10. ++p1;
  11.  
  12. if (p1 <= n1) {
  13. std::swap(z[p1], z[m1]);
  14. } else {
  15. std::reverse(z.begin() + m1 + 1, z.end());
  16. p1 = m1;
  17.  
  18. while (z[p1 + 1] <= z[p1])
  19. --p1;
  20.  
  21. int p2 = n1;
  22.  
  23. while (z[p2] <= z[p1])
  24. --p2;
  25.  
  26. std::swap(z[p1], z[p2]);
  27. std::reverse(z.begin() + p1 + 1, z.end());
  28. }
  29. }
  30.  
  31. int main() {
  32. std::vector<int> z = {1, 2, 3, 4, 5, 6, 7};
  33. int m = 3;
  34. int n = z.size();
  35.  
  36. const int nMinusK = n - m;
  37. int numPerms = 1;
  38.  
  39. for (int i = n; i > nMinusK; --i)
  40. numPerms *= i;
  41.  
  42. --numPerms;
  43.  
  44. for (int i = 0; i < numPerms; ++i) {
  45. for (int j = 0; j < m; ++j)
  46. std::cout << z[j] << ' ';
  47.  
  48. std::cout << std::endl;
  49. nextPartialPerm(z, n - 1, m - 1);
  50. }
  51.  
  52. // Print last permutation
  53. for (int j = 0; j < m; ++j)
  54. std::cout << z[j] << ' ';
  55.  
  56. std::cout << std::endl;
  57.  
  58. return 0;
  59. }
Success #stdin #stdout 0s 4516KB
stdin
Standard input is empty
stdout
1 2 3 
1 2 4 
1 2 5 
1 2 6 
1 2 7 
1 3 2 
1 3 4 
1 3 5 
1 3 6 
1 3 7 
1 4 2 
1 4 3 
1 4 5 
1 4 6 
1 4 7 
1 5 2 
1 5 3 
1 5 4 
1 5 6 
1 5 7 
1 6 2 
1 6 3 
1 6 4 
1 6 5 
1 6 7 
1 7 2 
1 7 3 
1 7 4 
1 7 5 
1 7 6 
2 1 3 
2 1 4 
2 1 5 
2 1 6 
2 1 7 
2 3 1 
2 3 4 
2 3 5 
2 3 6 
2 3 7 
2 4 1 
2 4 3 
2 4 5 
2 4 6 
2 4 7 
2 5 1 
2 5 3 
2 5 4 
2 5 6 
2 5 7 
2 6 1 
2 6 3 
2 6 4 
2 6 5 
2 6 7 
2 7 1 
2 7 3 
2 7 4 
2 7 5 
2 7 6 
3 1 2 
3 1 4 
3 1 5 
3 1 6 
3 1 7 
3 2 1 
3 2 4 
3 2 5 
3 2 6 
3 2 7 
3 4 1 
3 4 2 
3 4 5 
3 4 6 
3 4 7 
3 5 1 
3 5 2 
3 5 4 
3 5 6 
3 5 7 
3 6 1 
3 6 2 
3 6 4 
3 6 5 
3 6 7 
3 7 1 
3 7 2 
3 7 4 
3 7 5 
3 7 6 
4 1 2 
4 1 3 
4 1 5 
4 1 6 
4 1 7 
4 2 1 
4 2 3 
4 2 5 
4 2 6 
4 2 7 
4 3 1 
4 3 2 
4 3 5 
4 3 6 
4 3 7 
4 5 1 
4 5 2 
4 5 3 
4 5 6 
4 5 7 
4 6 1 
4 6 2 
4 6 3 
4 6 5 
4 6 7 
4 7 1 
4 7 2 
4 7 3 
4 7 5 
4 7 6 
5 1 2 
5 1 3 
5 1 4 
5 1 6 
5 1 7 
5 2 1 
5 2 3 
5 2 4 
5 2 6 
5 2 7 
5 3 1 
5 3 2 
5 3 4 
5 3 6 
5 3 7 
5 4 1 
5 4 2 
5 4 3 
5 4 6 
5 4 7 
5 6 1 
5 6 2 
5 6 3 
5 6 4 
5 6 7 
5 7 1 
5 7 2 
5 7 3 
5 7 4 
5 7 6 
6 1 2 
6 1 3 
6 1 4 
6 1 5 
6 1 7 
6 2 1 
6 2 3 
6 2 4 
6 2 5 
6 2 7 
6 3 1 
6 3 2 
6 3 4 
6 3 5 
6 3 7 
6 4 1 
6 4 2 
6 4 3 
6 4 5 
6 4 7 
6 5 1 
6 5 2 
6 5 3 
6 5 4 
6 5 7 
6 7 1 
6 7 2 
6 7 3 
6 7 4 
6 7 5 
7 1 2 
7 1 3 
7 1 4 
7 1 5 
7 1 6 
7 2 1 
7 2 3 
7 2 4 
7 2 5 
7 2 6 
7 3 1 
7 3 2 
7 3 4 
7 3 5 
7 3 6 
7 4 1 
7 4 2 
7 4 3 
7 4 5 
7 4 6 
7 5 1 
7 5 2 
7 5 3 
7 5 4 
7 5 6 
7 6 1 
7 6 2 
7 6 3 
7 6 4 
7 6 5