// output of ./demo/comb/perm-heap-demo.cc: // Description: //% Gray code for permutations, CAT algorithm. //% Algorithm following //% B. R. Heap: Permutations by Interchanges, //% The Computer Journal, vol. 6, pp. 293-294, (1963). arg 1: 4 == n [Number of elements to permute, n > 0] default=4 0: [ . 1 2 3 ] (0, 0) [ . . . ] [ . . . ] [ . 1 2 3 ] [ . . . ] 1: [ 1 . 2 3 ] (1, 0) [ 1 . . ] [ 1 . . ] [ 1 . 2 3 ] [ 1 . . ] 2: [ 2 . 1 3 ] (2, 0) [ . 1 . ] [ 1 1 . ] [ 1 2 . 3 ] [ . 2 . ] 3: [ . 2 1 3 ] (1, 0) [ 1 1 . ] [ . 1 . ] [ . 2 1 3 ] [ . 1 . ] 4: [ 1 2 . 3 ] (2, 0) [ . 2 . ] [ . 2 . ] [ 2 . 1 3 ] [ 1 1 . ] 5: [ 2 1 . 3 ] (1, 0) [ 1 2 . ] [ 1 2 . ] [ 2 1 . 3 ] [ 1 2 . ] 6: [ 3 1 . 2 ] (3, 0) [ . . 1 ] [ 1 2 1 ] [ 2 1 3 . ] [ 1 . 3 ] 7: [ 1 3 . 2 ] (1, 0) [ 1 . 1 ] [ . 2 1 ] [ 2 . 3 1 ] [ 1 . 2 ] 8: [ . 3 1 2 ] (2, 0) [ . 1 1 ] [ . 1 1 ] [ . 2 3 1 ] [ . . 2 ] 9: [ 3 . 1 2 ] (1, 0) [ 1 1 1 ] [ 1 1 1 ] [ 1 2 3 . ] [ . . 3 ] 10: [ 1 . 3 2 ] (2, 0) [ . 2 1 ] [ 1 . 1 ] [ 1 . 3 2 ] [ 1 . 1 ] 11: [ . 1 3 2 ] (1, 0) [ 1 2 1 ] [ . . 1 ] [ . 1 3 2 ] [ . . 1 ] 12: [ . 2 3 1 ] (3, 1) [ . . 2 ] [ . . 2 ] [ . 3 1 2 ] [ . 1 1 ] 13: [ 2 . 3 1 ] (1, 0) [ 1 . 2 ] [ 1 . 2 ] [ 1 3 . 2 ] [ . 2 1 ] 14: [ 3 . 2 1 ] (2, 0) [ . 1 2 ] [ 1 1 2 ] [ 1 3 2 . ] [ . 1 3 ] 15: [ . 3 2 1 ] (1, 0) [ 1 1 2 ] [ . 1 2 ] [ . 3 2 1 ] [ . 1 2 ] 16: [ 2 3 . 1 ] (2, 0) [ . 2 2 ] [ . 2 2 ] [ 2 3 . 1 ] [ . 2 2 ] 17: [ 3 2 . 1 ] (1, 0) [ 1 2 2 ] [ 1 2 2 ] [ 2 3 1 . ] [ . 2 3 ] 18: [ 3 2 1 . ] (3, 2) [ . . 3 ] [ 1 2 3 ] [ 3 2 1 . ] [ 1 2 3 ] 19: [ 2 3 1 . ] (1, 0) [ 1 . 3 ] [ . 2 3 ] [ 3 2 . 1 ] [ 1 2 2 ] 20: [ 1 3 2 . ] (2, 0) [ . 1 3 ] [ . 1 3 ] [ 3 . 2 1 ] [ 1 1 2 ] 21: [ 3 1 2 . ] (1, 0) [ 1 1 3 ] [ 1 1 3 ] [ 3 1 2 . ] [ 1 1 3 ] 22: [ 2 1 3 . ] (2, 0) [ . 2 3 ] [ 1 . 3 ] [ 3 1 . 2 ] [ 1 2 1 ] 23: [ 1 2 3 . ] (1, 0) [ 1 2 3 ] [ . . 3 ] [ 3 . 1 2 ] [ 1 1 1 ] ct=24