Изменения

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

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

19 байт убрано, 12:05, 23 ноября 2014
Специализация алгоритма для генерации следующей мультиперестановки
* Меняем его с минимальным элементом, большим нашего, стоящим правее.
* Переворачиваем правую часть.
'''function''' nextMultiperm(var b:array[1..N] of integer): array[1..N] of integer;
'''var''' i , j : '''integer''';
'''begin'''
i := N - 1;
'''while''' (i > 0) '''and''' (b[i] >= b[i + 1]) '''do'''
dec(i);--
'''if''' i > 0 '''then'''
'''begin'''
j := i + 1;
'''while''' (j < N) '''and''' (b[j + 1] > b[i]) '''do'''
inc(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;'''
=== Пример работы ===
Анонимный участник

Навигация