您的位置:首页 > 其它

全排列的递归实现

2010-03-31 11:25 260 查看
#include <stddef.h>
#include <iostream>

using namespace std;

template<typename T>
void swap(T& a, T& b)
{
T tmp = a;
a = b;
b = tmp;
}

// 递归实现全排列, P(n) = R1P(R1)+...+RnP(Rn).
// RiP(Ri)- 以Ri开头的全排列
// beg: 起始位置(从0开始)
// end: 终止位置的下一个位置(超出终点位置)
// 返回所有排列数

template<typename T>
size_t perm(T arr, size_t beg, size_t end)
{
static size_t n = 0;
if(beg == end){ // only one elem
for(size_t i = 0; i < end; ++i)
std::cout << arr[i] << " ";
std::cout << std::endl;
++n;
}
else{
for(size_t i = beg; i != end; ++i){
swap(arr[beg], arr[i]);
perm(arr, beg+1, end);
swap(arr[beg], arr[i]);
}
}
return n;
}

int main()
{
int test[] = {5,3,6,7};
size_t n = perm(test, 0, 4);
std::cout <<"Total: " << n << std::endl;
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: