#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; }