我最近参加了 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;
}
可以看到带有辅助功能的代码swap()
and printArray()
执行基本测试用例ideone
Bonus: 这个和这个想法很相似费希尔-耶茨洗牌,但在这里 - 而不是交换元素i
与随机选择的以下元素 - 您将其与所有元素交换 - 一次每个元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)