元<极 B,整 K>常式 动 双交换(){
如 常式(B){//满足条件
中 双{序列<K>(),序列<>()};
}异{
中 双{序列<>(),序列<K>()};
}
}
元<极 B,整 K,整...I,整...J>
常式 动 双交换(双<序列<I...>,序列<J...>>&t){
如 常式(B){//满足条件,加在第一个.
中 双{连序<K>(t.第一),t.第二};
}异{//不满足,加在第二个.
中 双{t.第一,连序<K>(t.第二)};
}
}
元<元<整>类 G>构 分序列{//类版本,不搞那么难.
元<整 K,整...I>静 常式 动 序号(){
//返回两个,都是序号.K为第一.
常式 整 N=型长...(I);
常式 极 B=G<K>::动作();
如 常式(!N)中 双交换<B,K>();
异{//第1位为序号
动 t=序号<I...>();
中 双交换<B,K>(t);
}
}//既要序号,还要位置.
};//还是不行,向量[I],这里
//用两个(位置,序号)来表达,而非(位置,序号)对,
//因为这要的话,要两个`G判断构`来表示.
元<元<整>类 G,整...J>常式 动 分二序(){
中 分序列<G>::元 序号<J...>();
}//