全排列(next_permutation,遞迴)
阿新 • • 發佈:2018-12-24
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int n,p[10],i;
cin>>n;
for(i=0;i<n;i++) scanf("%d",&p[i]);
sort(p,p+n);
do{
for(i=0;i<n;i++) printf("%d ",p[i]);
printf("\n");
}while(next_permutation(p,p+n)); //求下一個排列
return 0;
}
法二.遞迴求全排列
#include <iostream>
using namespace std;
template<typename T>
void permutation(T array[], int begin, int end)
{
int i;
if(begin == end){
for(i = 0; i <= end; ++i){
cout<<array[i]<<" ";
}
cout<<endl;
return ;
} else {
//for迴圈遍歷該排列中第一個位置的所有可能情況
for(i = begin; i <= end; ++i) {
swap(array[i], array[begin]);
permutation(array, begin + 1, end);
swap(array[i], array[begin]);
}
}
}
int main(int argc, char **argv)
{
int a[4] = {1, 2, 3, 4 };
permutation(a, 0, sizeof(a) / sizeof(int) - 1);
return 0;
}