Изменения

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

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

92 байта добавлено, 16:32, 12 декабря 2013
м
Специализация алгоритма для генерации следующей мультиперестановки
* Меняем его с минимальным элементом, большим нашего, стоящим правее.
* Переворачиваем правую часть.
'''procedure''' nextMultiperm(var b: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]); '''Вывод перестановки write(b[1..N]);''' '''end''' '''else''' '''begin''' write('null'); 'Вывести "Нет ответа"''end;''' '''end;'''
=== Пример работы ===
76
правок

Навигация