枚举全排列

1.next_permutaton生成字典序全排列,要先将数组排序。

#include <algorithm>
#include <iostream>
using namespace std;

char c[3] = {'c','b','a'};

int main()
{
    sort(c, c+3);
    do{
        for(int i = 0; i < 3; i++) cout<<c[i]; cout<<endl;
    }while(next_permutation(c, c+3));
    return 0;
}

2.prev_permutation生成逆字典序排列

3.递归枚举

#include <iostream>
#include <cstring>
using namespace std;

char c[3] = {'c','b','a'};
int vis[3];

void dfs(int k, string s)
{
    if(k == 0){
        cout<<s<<endl;
        return;
    }

    for(int i = 0; i < 3; i++){
        if(!vis[i]){
            vis[i] = 1;
            dfs(k-1, s+c[i]);
            vis[i] = 0;
        }
    }
}

int main()
{
    memset(vis, 0, sizeof(vis));
    string temp;
    dfs(3, temp);
    return 0;
}
posted @ 2017-07-06 14:38  />.<\  阅读(765)  评论(0编辑  收藏  举报