1. 程式人生 > >全排列(next_permutation,遞迴)

全排列(next_permutation,遞迴)

#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; }