全排列的C/C++实现

来源:互联网 发布:数据库面试宝典 编辑:程序博客网 时间:2024/05/18 09:14

全排列实现

#include <iostream>

#include <stdio.h>

#include <string>

#include <vector>

using namespace std;

 

template<typename T>

void perm(vector<T> list,int k, int m,vector<vector<T>> &resul) 

         inti; 

         if(k>m) {

                   resul.push_back(list);

         }

         else  { 

                   for(i= k ; i <=m;i++)  {

                            if(i!=k){

                                     //swap(list[k],list[i]);

                                     Ttemp=list[k];

                                     list[k]=list[i];

                                     list[i]=temp;

                            }

                            perm(list,k+1,m,resul); 

                            if(i!=k){

                                     //swap(list[k],list[i]);

                                     Ttemp=list[k];

                                     list[k]=list[i];

                                     list[i]=temp;

                            }

 

                   } 

         } 

}

 

#define NN 4

int main(){

        

         vector<int>nu;

         inta[NN]={1,2,3,4};

         for(int i=0;i<NN;i++)

                   nu.push_back(a[i]);

 

         vector<vector<int>>re;

         perm(nu,0,NN-1,re);

 

         for(int i=0;i<re.size();i++)

         {

                   for(int j=0;j<re[0].size();j++)

                            cout<<re[i][j];

                   cout<<"";

         }

         return0;

}

 

解释一下,采用的模板机制,可以对诸如vector<T>nu {0,1,2,3,4,5……},或者{a,b,c,d……},或者{ab,ac,dnd,mfd……}等采用递归方法进行全排列,并且将排列的结果保存在vector<vector<T>> re;

初学的菜鸟可以借鉴一下

 

原创粉丝点击