考虑以下数字列表:0, 1, 2, 3
我试图找到长度为 2、3 和 4 的列表的所有排列。
IE
(0, 1)
(0, 2)
(0, 3)
(1, 0)
(1, 2)
(1, 3)
(2, 0)
(2, 1)
(2, 3)
(3, 0)
(3, 1)
(3, 2)
(0, 1, 2)
(0, 1, 3)
(0, 2, 1)
(0, 2, 3)
(0, 3, 1)
(0, 3, 2)
(1, 0, 2)
(1, 0, 3)
(1, 2, 0)
(1, 2, 3)
(1, 3, 0)
(1, 3, 2)
(2, 0, 1)
(2, 0, 3)
(2, 1, 0)
(2, 1, 3)
(2, 3, 0)
(2, 3, 1)
(3, 0, 1)
(3, 0, 2)
(3, 1, 0)
(3, 1, 2)
(3, 2, 0)
(3, 2, 1)
(0, 1, 2, 3)
(0, 1, 3, 2)
(0, 2, 1, 3)
(0, 2, 3, 1)
(0, 3, 1, 2)
(0, 3, 2, 1)
(1, 0, 2, 3)
(1, 0, 3, 2)
(1, 2, 0, 3)
(1, 2, 3, 0)
(1, 3, 0, 2)
(1, 3, 2, 0)
(2, 0, 1, 3)
(2, 0, 3, 1)
(2, 1, 0, 3)
(2, 1, 3, 0)
(2, 3, 0, 1)
(2, 3, 1, 0)
(3, 0, 1, 2)
(3, 0, 2, 1)
(3, 1, 0, 2)
(3, 1, 2, 0)
(3, 2, 0, 1)
(3, 2, 1, 0)
我需要在 C 中实现这一点,但我发现的所有算法 [1,2] 只给出长度等于数字列表长度的排列,即只给出(0, 1, 2, 3)
上面块中的结果。将长度从 4 减少到 3 只给出 list 的排列0, 1, 2
。
我目前可以使用 Python 实现我想要的itertools.permutation
,如下所示。
import itertools
MaxN = 4
for Length in range(2, MaxN + 1):
for perm in itertools.permutations(Indices, Length):
print perm
任何有关如何在 C 中实现这一点的建议将不胜感激。
[1] http://rosettacode.org/wiki/Permutations#C
[2] http://www.geeksforgeeks.org/write-ac-program-to-print-all-permutations-of-a-given-string/