void dfs(int* nums, int n, int i, list<int>& cur, list<list<int> >& ret, vector<bool> &flag)
{
if(i == n)
{
ret.push_back(cur);
return;
}
for(int p = 0; p < n; p++)
{
if(flag[p]) continue;
cur.push_back(nums[p]);
flag[p] = true;
dfs(nums, n, i+1, cur, ret, flag);
cur.pop_back();
flag[p] = false;
}
}
void permute(int* nums, int len)
{
int n = len;
list<list<int> > ret;
vector<bool> flag;
flag.resize(n, false);
list<int> cur;
dfs(nums, n, 0, cur, ret, flag);
for(list<list<int> >::iterator it = ret.begin(); it != ret.end(); ++it)
{
list<int> &ll = *it;
for(list<int>::iterator iit = ll.begin(); iit != ll.end(); ++iit)
{
printf("%d ", *iit);
}
printf("\n");
}
}
int main()
{
int arr[] = {1,2,3};
permute(arr, 3);
}