全排列

全排列可以用递归的方式手写,不过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 后的样子。

原文地址:https://www.cnblogs.com/mrclr/p/8387042.html