//交换两个指针所指向的值
template <typename T>
inline void TSwap(T* a,T* b){
T t = *a ;
*a = *b ;
*b = t ;
}
//将begin至end区间的变量逆序(end不参加处理)
template <typename T>
void reverse(T* begin,T* end){
while(begin < (-- end))TSwap(begin,end) , ++ begin ;
return ;
}
//获取下一个全排列
template <typename Type>
bool next_permutation(Type* start,Type* end){
Type* i = end ;
while(-- i > start && *i <= *(i - 1)) ;
if(i <= start)return false ;
Type* j = end ;
while(-- j >= i)
if(*j > *(i - 1)){
TSwap(j,i - 1) ;
reverse(i,end) ;
break ;
}
return true ;
}
库函数自实现之next_permutation
最新推荐文章于 2024-07-24 11:32:27 发布