基本算法——全排列
对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]); } } }