Изменения

Перейти к: навигация, поиск

Получение следующего объекта

81 байт убрано, 13:21, 26 ноября 2014
Специализация алгоритма для генерации следующей мультиперестановки
* Меняем его с минимальным элементом, большим нашего, стоящим правее.
* Переворачиваем правую часть.
'''function''' nextMultiperm(var b:arrayint[1..N] of integerb): arrayint[1..] <font color=green>// <tex>N] of integer '''var''' i , j : '''integer'''</tex> {{---}} длина мультиперестановки</font>
'''begin'''
i = N - 1 '''while''' (i > 0) '''and''' (b[i] >= b[i + 1]) '''do''' i-- '''if''' i > 0 '''then''' '''begin'''
j = i + 1
'''while''' (j < N) '''and''' (b[j + 1] > b[i]) '''do'''
j++
swap(b[i] , b[j])
'''for''' j = i + 1 '''to''' (N + i) '''div''' 2 '''do'''
swap(b[j], b[N - j + i + 1])
return(b[1..N])
'''end''' '''else''' '''begin'''
return(null)
'''end'''
'''end'''
=== Пример работы ===
Анонимный участник

Навигация