next_permutation() 全排列函数

c/c++

浏览数:475

2019-6-10

next_permutation() 全排列函数

这个函数是STL自带的,用来求出该数组的下一个排列组合
相当之好用,懒人专用
适用于不想自己用dfs写全排列的同学(结尾附上dfs代码)

洛谷oj可去 P1008 三连击

注意:

  1. 使用前数组需要排序(升序)
  2. prev_permutation()是求前一个排列组合
  3. 数组 vector都可以,确定全排列的范围
#include <iostream>
#include <algorithm> //函数所需头文件
using namespace std;
int a[10];
void f(){
    int t1,t2,t3;
    t1=a[1]*100+a[2]*10+a[3]*1;
    t2=a[4]*100+a[5]*10+a[6]*1;
    t3=a[7]*100+a[8]*10+a[9]*1;
    if(t1*2==t2&&t1*3==t3) cout<<t1<<" "<<t2<<" "<<t3<<endl;
}
int main(){
    for(int i=1;i<=9;++i) a[i]=i; //sort
    do{
        f();
    }while(next_permutation(a+1,a+10)); //prev_
    return 0;
}

dfs全排列

#include <bits/stdc++.h>
using namespace std;
int a[10];
bool vis[10]={0}; //记录该数字是否被使用过
int n=9;
void dfs(int idx){
    if(idx>n){ //边界输出
        for(int i=1;i<=n;++i) cout<<a[i];
        cout<<endl;
    }
    for(int i=1;i<=n;++i){
        if(!vis[i]){
            vis[i]=1;
            a[idx]=i;
            dfs(idx+1);
            vis[i]=0; //回溯
        }
    }
}
int main(){
    cin>>n;
    dfs(1);
    return 0;
}

作者:lidasu