我最近参加了ACM认证的编程竞赛。这是我当时无法解决的问题:
“给出一个包含n个元素的整数数组,编写一个程序来打印所有排列。”
请告诉我该怎么做。有没有算法可以解决此类问题?
假设没有重复:只需更改每个元素及其后的所有可能元素,然后递归调用该函数即可。
void permute(int *array,int i,int length) { if (length == i){ printArray(array,length); return; } int j = i; for (j = i; j < length; j++) { swap(array+i,array+j); permute(array,i+1,length); swap(array+i,array+j); } return; }
您可以在ideone上查看具有辅助功能swap()和printArray()基本测试用例的代码
swap()
printArray()
奖励 :这类似于fisher-yatesshuffle的想法,但是在这里- 意味着要交换at元素i与随机选择的后续元素-一次将其与所有它们交换。
i