Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
void perm(int start,int end,vector<int> in,vector<vector<int> > &res)
{
if(start==end)//表示找到了一个排列
{
res.push_back(in);
return ;
}
for(int i=start;i<=end;i++)//固定起点,枚举交换后面的元素
{
swap(in[start],in[i]);
perm(start+1,end,in,res);//递归回溯考虑下一个起始位置
swap(in[start],in[i]);
}
}
vector<vector<int> > permute(vector<int> &num)
{
vector<vector<int> > vv;
perm(0,num.size()-1,num,vv);
return vv;
}
int main(int argc,char *argv[])
{
freopen("input.txt","r",stdin);
vector<int> v;
vector<vector<int> > vv;
int num,tmp;
cin>>num;
for(int i=0;i<num;i++)
{
cin>>tmp;
v.push_back(tmp);
}
vv=permute(v);
cout<<"the size of vv is:"<<vv.size()<<endl;
int vvlen=vv.size();
for(int i=0;i<vv.size();i++)
{
int vlen=vv[i].size();
for(int j=0;j<vv[i].size();j++)
cout<<vv[i][j]<<" ";
cout<<endl;
}
return 0;
}