【day-6】全排列-不重复

    xiaoxiao2021-03-25  103

    #include <iostream> #include <vector> #include <assert.h> using namespace std; void PermRecur(vector<int>& num, vector<int>& use, vector<int>& res, int k) {     //如果下标k等于size,说明所有元素已经放置完毕     if (k == res.size())     {         for (int i = 0; i < k; ++i)             cout << res[i] << ' ';         cout << endl;         return;     }     for (int i = 0; i < num.size(); ++i)     {         //标记大于0说明还有剩余的元素没有放置         if (use[i] > 0)         {             //元素被放置后次数减1             --use[i];             res[k] = num[i];             PermRecur(num, use, res, k + 1);             //递归结束后再将该元素的次数加1             ++use[i];         }     } } void Perm(vector<int>& ivec) {     assert(!ivec.empty());     int size=ivec.size();     vector<int> res(size);     vector<int> use;     vector<int> num;     use.push_back(1);     num.push_back(ivec[0]);     for(int i=1; i<size; ++i)     {         int j=0;         for(; j<num.size();++j)         {             if(ivec[i]==num[j])             {                 ++use[j];                 break;             }         }         if(j==num.size())         {             use.push_back(1);             num.push_back(ivec[i]);         }     }     cout<<"num:  ";     for(int i=0; i<num.size(); i++)     {         cout<<num[i]<<" ";     }     cout<<endl;     cout<<"use:  ";     for(int i=0; i<use.size(); i++)     {         cout<<use[i]<<" ";     }     cout<<endl;     PermRecur(num, use, res, 0); } int main() {     int a[] = {1, 2, 2,3,3,4};     vector<int> ivec(a, a + sizeof(a)/sizeof(a[0]));     cout<<"array:  ";     for(int i=0; i<ivec.size(); i++)     {         cout<<ivec[i]<<" ";     }     cout<<endl;     Perm(ivec);     return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-23527.html

    最新回复(0)