生成不是彼此镜像的排列

ken*_*nor 1 c++ algorithm permutation combinatorics

我想生成n个数字的排列,其中没有两个排列是彼此的反转(第一个从最后一个字符读到第一个字符与第二个字符相同).例如,n = 3,我想生成:

1 2 3 //but not 3 2 1
1 3 2 //but not 2 3 1
2 1 3 //but not 3 1 2
Run Code Online (Sandbox Code Playgroud)

我不关心这两者中的哪一个会产生.该算法应适用于大n(> 20).是否有任何此类算法或方法来检查生成的排列是否是先前生成的排列的镜像?

Dav*_*tat 7

使用std::next_permutation和忽略第一个元素大于最后一个元素的排列.