本文主要是介绍排列组合的递归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
令E={e1,e2,…,en}表示n个元素的集合,;Ei为E中移去元素ei后的集合,perm(X)表示集合X中元素的排列方式。Ei*perm(X)表示在集合X的每个排列方式的前面都加上ei后所得的排列方式。
则集合E的排列组合等于:
n= 1;perm(E) = {e1};
n> 1;perm(E) = e1*perm(E1)+e2*perm(E2)+……+en*perm(En);
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;/* 求n个元素的排列组合
* n = 1;perm(E) = {e1};
* n > 1;perm(E) = e1*perm(E1)+e2*perm(E2)+……+en*perm(En);
*/
void fun(vector<int> & vec,vector<int>::iterator iter)
{if(iter+1 == vec.end()){copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));cout<<endl;return;}for (vector<int>::iterator it = iter; it< vec.end(); it++){swap_ranges(it,it+1,iter);fun(vec,iter+1);swap_ranges(it,it+1,iter);}
}int main()
{vector<int> vec;copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(vec));fun(vec,vec.begin());
}/*输入和运算结果:1 2 3 4^Z1 2 3 41 2 4 31 3 2 41 3 4 21 4 3 21 4 2 32 1 3 42 1 4 32 3 1 42 3 4 12 4 3 12 4 1 33 2 1 43 2 4 13 1 2 43 1 4 23 4 1 23 4 2 14 2 3 14 2 1 34 3 2 14 3 1 24 1 3 24 1 2 3请按任意键继续. . .
*/
这篇关于排列组合的递归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!