排列組合

Posted on Thu, Nov 11, 2021 C++
#include <bits/stdc++.h>

using namespace std;

struct p{
    int cnt;
    int num;
};

print(vector<p> v){
    for(int i=0;i<v.size();i++) cout<<"cnt "<<v[i].cnt<<" num "<<v[i].num<<" ";
    cout<<endl;
}

permutations(vector<p> v,int num){
    if(v.size()>0){
    for(int i=0;i<v.size();i++){
        //cout<<"nownum "<<num<<endl;
        if(v[i].cnt==1){
            p temp=v[i];
            int add=v[i].num;
            v.erase(v.begin()+i);
            //print(v);
            permutations(v,num*10+add);
            v.insert(v.begin()+i,temp);
            //print(v);
        }else
        {
            v[i].cnt--;
            permutations(v,num*10+v[i].num);
            v[i].cnt++;
        }
    }
    }else
    {
        cout<<num<<endl;
    }
}

int main()
{
    vector<p> v(2);
    v[0].cnt=1;
    v[0].num=3;
    v[1].cnt=2;
    v[1].num=2;
    permutations(v,0);


    return 0;
}