6.全排列问题

1.问题描述

2.问题分析

全排列问题归根到底就是要把所有可能都找出来,一般方式就是深度或者广度遍历。本文考虑利用深度遍历结合回溯的方案。举个例子。假如第一次选择1,则第二次可以选择2,第三次选择3,这样三个元素就利用完了,接着退回到第二步,第二次可以选3,则第三步可以选2。依然退回到第二步,发现第二步所有可能已经遍历完,接着回退第一步,第一步还可以备选的有2,3,接着重复上述流程就可以获得所有值。思路很简单,但是如何选择合适的数据结构与算法是关键。

3.代码

vector<vector<int> > permute(vector<int> &num) 
    {/*numw为输入,返回值是所有排列组合*/
        vector<vector<int> > result;//结果
        Function(result,num,0);//递归函数
        return result;
    }
    
    void Function(vector<vector<int>>&  result, vector<int> num, int n)
    {
        int size=num.size();
        if(n==size) result.push_back(num);
        for(int i=n;i<size;i++)
        {
            swap(num[n],num[i]);
            Function(result,num,++n);
            swap(num[--n],num[i]);
        }
    }

猜你喜欢

转载自blog.csdn.net/feng__shuai/article/details/81004115
今日推荐