全排列算法c++实现

来源:互联网 发布:怎样提高淘宝买家信用 编辑:程序博客网 时间:2024/04/29 11:08

问题:

[cpp] view plaincopyprint?
  1. Given a collection of numbers, return all possible permutations.  
  2.   
  3. For example,  
  4. [1,2,3] have the following permutations:  
  5. [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].  

Solution:

[cpp] view plaincopyprint?
  1. #include <iostream>  
  2. #include<vector>  
  3. #include<algorithm>  
  4. using namespace std;  
  5. class Solution {  
  6. public:  
  7.     vector<vector<int> > permute(vector<int> &num)  
  8.     {  
  9.         vector<vector<int> > resultVector;  
  10.         sort(num.begin(),num.end());//STL algorithm funtion  
  11.         do  
  12.         {  
  13.             vector<int> vOne;  
  14.             for(int i=0;i<num.size();i++)  
  15.                 vOne.push_back(num[i]);  
  16.             resultVector.push_back(vOne);  
  17.         }while(next_permutation(num.begin(),num.end()));//next_permutation you can find in STL  
  18.         return resultVector;  
  19.     }  
  20.     vector<vector<int> > permuteOrder(int n)  
  21.     {  
  22.         vector<int> num;  
  23.         for(int i=1;i<=n;i++)  
  24.             num.push_back(i);  
  25.         return permute(num);  
  26.     }  
  27.     void printCollection(vector<vector<int> > &vResult)  
  28.     {  
  29.         for(vector<vector<int> >::const_iterator iter = vResult.begin();iter!=vResult.end();iter++)  
  30.         {  
  31.             for(vector<int>::const_iterator it = (*iter).begin();it!=(*iter).end();it++)  
  32.             {  
  33.                 cout<<*it<<" ";  
  34.             }  
  35.             cout<<endl;  
  36.         }  
  37.   
  38.     }  
  39. };  
  40. int main()  
  41. {  
  42.     vector<int> num ;  
  43.     num.push_back(1);  
  44.     num.push_back(3);  
  45.     num.push_back(2);  
  46.     Solution so;  
  47.     cout<<"permutation"<<endl;  
  48.     vector<vector<int> >  vResult = so.permute(num);  
  49.     so.printCollection(vResult);  
  50.     cout<<"order permutation"<<endl;  
  51.     vector<vector<int> >  vOrderResult = so.permuteOrder(3);  
  52.     so.printCollection(vOrderResult);  
  53.       
  54.     return 0;  
  55. }