1
freeznet 2013-09-05 14:24:05 +08:00 1
swap(v, n % 2 == 1 ? 0 : i, n - 1);
可以翻譯成 if( n % 2 == 1 ){ swap(v, 0, n-1) }else{ swap(v, i ,n-1) } 不知道你問的是不是這個... |
3
KMHook 2013-09-06 09:49:22 +08:00 2
http://blog.csdn.net/honpey/article/details/6904118
注意到: 当n为偶数时,permute()输出全排列后数组元素循环右移一位。 当n为奇数时,permute()输出全排列后数组元素顺序保持不变。 |
4
venson999 OP @KMHook 首先感谢你的回复,有一些疑问,为什么当n为奇数时,permute()输出全排列后数组元素顺序保持不变?以输入[1, 2, 3]为例,会得到如下输出:
[1, 2, 3] [2, 1, 3] [3, 1, 2] [1, 3, 2] [2, 3, 1] [3, 2, 1] 数组顺序完全变了,是我这样理解有问题吗? |
5
byelims 2013-09-06 16:49:05 +08:00 1
关于如何生成全排列我是这么想的。
先从数组中“取”出第一个元素,然后对数组里剩下的元素进行递归调用。 接下来取第二个,递归;取第三个,递归;…… 所以我想关键在于怎么把数组里的元素不重复地取出来? 我的做法是把目标元素先换到数组里的一个固定位置,递归完成后再换回去,恢复原样。 https://gist.github.com/byelims/6461065 至于为什么可以像顶楼那样做,我想你可以看看原始论文。 http://comjnl.oxfordjournals.org/content/6/3/293.full.pdf |