基本算法——全排列

对n个数进行全排列,有n!种排列方式。这里我们使用递归方式处理,将问题切割为较小的单元进行排列组合。

例如1 2 3 4的排列可以分为1 [2 3 4],2[1 3 4],3[1 2 4],4[1 2 3]进行排列。即每一个元素都当一次首位,然后剩余的元素再递归进行全排列。

第0层      第1层     第2层 ...

1234      1 2 3 4    继续将右边2 3 4进行递归处理 ...
      2 1 3 4      继续将右边1 3 4进行递归处理 ...
      3 1 2 4      继续将右边1 2 4进行递归处理 ...
      4 1 2 3      继续将右边1 2 3进行递归处理 ...

    vector<vector<int> > ans;
    
    void permutation(vector<int> &a, int begin, int end) 
  {
if (begin==end) { ans.push_back(a); return; } else { int i = begin; for (; i <= end ; ++i) { swap(a[i], a[begin]); permutation(a, begin+1, end); swap(a[i], a[begin]); } } }

 

posted on 2014-04-22 21:04  bbking  阅读(216)  评论(0编辑  收藏  举报

导航