全排列可以用递归的方式手写,不过c++函数库里自带一个全排列函数。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 int a[4] = {3, 4, 2, 6}, cnt = 0; 6 int main() 7 { 8 sort(a , a + 4); //用全排列时必须先排序,虽然我也不知道为什么 9 do 10 { 11 printf("%d %d %d %d ", a[0], a[1], a[2], a[3]); 12 cnt++; 13 } 14 while(next_permutation(a, a + 4)); //注意格式 15 /*之所以是 do-while,是因为若直接 while 的话,函数已经 16 开始运行,就少了第一组解 */ 17 printf("total=%d ", cnt); 18 return 0; 19 }
输出
n 的全排列就是 n! 嘛
值得一提的是,这个函数并不会改变数组内元素的值和位置,数组还是 sort 后的样子。