1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include <cstdio>
template <typename T> void swap(T& a, T& b) { T t = a; a = b; b = t; }
template <typename T> bool next_permutation(T s, T e) { static T p, q; for (p = e - 2; p >= s; --p) { if (*p < p[1]) break; } if (p < s) return false; for (q = p + 1; q < e; ++q) { if (*q <= *p) break; } swap(*p++, *--q); for (q = e - 1; p < q;) swap(*p++, *q--); return true; }
int main(int argc, char* argv[]) { int a[] = {2, 1, 3, 4}, n = sizeof(a) / sizeof(int); do { for (int i = 0; i < n - 1; ++i) printf("%d ", a[i]); printf("%d\n", a[n - 1]); } while(next_permutation(a, a + n)); return 0; }
|