void
Depart(
int
begin,
//基准,防止重复的排列
- int m, //被分裂的数
- vector<int>& arr //已经分裂的数存放于此
- )
- {
- //v1,v2是被分裂的两个数
- int v1 = begin+1;
- int v2 = m-begin-1;
- for(; v1<v2 ; v1++,v2--)
- {
- arr.push_back(v1);
- arr.push_back(v2);
- //打印当前排列
- copy(arr.begin(), arr.end(), ostream_iterator<int>(cout,"\t"));
- printf("\n");
- //递归分裂v2
- arr.pop_back();
- Depart(v1,v2,arr);
- //为其他排列做准备,清除当前的分裂情况
- arr.pop_back();
- }
- }