数组的全排列

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);

}


版权声明:本文为XiaoWhy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。