Permutations
void permute(permtype * p, const char * expr) { p->perms[0][0] = expr[0]; for (size_t i = 1; i < p->LEN; ++i) merge(p, i, expr[i]); } void merge(permtype * p, const size_t index, const char elem) { const size_t Nprev = index > 0 ? factorial(index) : 0; assert(p->N > Nprev); size_t j = Nprev; for (size_t i = 0; i < Nprev; ++i) { for ( size_t k = 0; k < index; ++k ) splice(&(p->perms[j++]), p->perms[i], elem, k, index); p->perms[i][index] = elem; } }
Комментариев нет:
Отправить комментарий