枚举全排列的方法

Posted taming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举全排列的方法相关的知识,希望对你有一定的参考价值。

若多个数值不等,则可以直接通过递归进行枚举,从左到右考虑每个数在当前前缀中是否使用过,使用过的话就跳过,没使用过就放入前缀进行下一次递归

#include<bits/stdc++.h>
using namespace std;

const int maxN=10000;
int N;

vector<int> all;
vector<int> premutation;
bool vis[maxN];

void printPremutation(){
    if(premutation.size()==all.size()){
        for(int i=0;i<premutation.size();i++)cout<<premutation[i]<< ;
        cout<<endl;
        return;
    }
    for(int i=0;i<N;i++)if(!vis[i]){
        vis[i]=true;
        premutation.push_back(all[i]);
        printPremutation();
        premutation.pop_back();
        vis[i]=false;
    }
}

int main(){
    for(int i=1;i<=5;i++)all.push_back(i);
    memset(vis,0,sizeof(vis));
    N=5;
    printPremutation();
    system("pause");
}

 

以上是关于枚举全排列的方法的主要内容,如果未能解决你的问题,请参考以下文章

Java 全排列与组合

枚举有重复元素的排列的两种方法

[Mdfs] lc剑指 Offer 38. 字符串的排列(全排列+枚举顺序+组合类型枚举+知识理解+模板题)

模板:枚举全排列

全排列递归算法

UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理