全排列



#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('\n');
    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;
}

 

posted @ 2018-04-13 20:20  unknownname  阅读(128)  评论(0编辑  收藏  举报