#include <iostream> using namespace std; bool b[4]; int ans[4]; /*全排列*/ void dfs(int num) { if(num == 4) { for(int i = 1; i <= 3; i++) cout<<ans[i]; } cout << endl; int i; for(i = 1; i <= 3; i++) { if(b[i] == false) { b[i] = true; ans[num] = i; dfs(num+1); ans[num] = 0; b[i] = false; } } } int main() { dfs(1); return 0; }
方法二:交换
如对1,2,3,4全排列
将1,2,3,4分别交换到头部打头,然后对后面剩余的元素又进行全排列
1 ,,,,排完后将交换的元素交换回来,进行下一次全排列
2,,,,
3,,,,
4,,,,
#include <iostream> #include <cstdio> using namespace std; void perm(int a[],int n,int p,int q) { if(p == q) for(int i = 0; i < n; i++) printf("%d ",a[i]); putchar(' '); for(int i = p; i < q; i++) { swap(a[i],a[p]); perm(a,n,p+1,q);//对p+1到q的元素进行全排列 swap(a[i],a[p]); } } int main() { int a[4] = {1,2,3,4}; int n = 4; perm(a,n,0,4); return 0; }
方法三:C++函数next_permutation()
#include <algorithm> int perm2[maxn]; void permutation(int n) { for(int i = 0; i < n; i++) perm2[i] = i+1; do { /* *编写需要对erm2进行的操作 */ }while(next_permutation(perm2,perm2+n)); return; }