// permute - 全排列 - 开始
template<typename Data>
void _permute(Data *a, int n, int k, void (*f)(Data *, int)) {
if(k+1 == n) f(a, n);
else for(int i=k; i<n; i++) {
std::swap(a[k], a[i]);
_permute(a, n, k+1, f);
std::swap(a[k], a[i]);
}
}
template<typename Data>
void permute(Data *a, int n, void (*f)(Data *, int)) {
_permute(a, n, 0, f);
}
// permute - 全排列 - 结束
// combine - 组合 - 开始
template<typename Data>
void _combine(Data *a, int n, int m, int k, Data *b, void (*f)(Data *, int)) {
for(int i=n-1; i>=m-k-1; i--) {
b[m-k-1] = a[i];
if(m-k-1 == 0) f(b, m);
else _combine(a, i, m, k+1, b, f);
}
}
template<typename Data>
void combine(Data *a, int n, int m, void (*f)(Data *, int)) {
Data b[m];
_combine(a, n, m, 0, b, f);
}
// combine - 组合 - 结束
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。