Здравствуйте, Vladimir E., Вы писали:
VE>Пишу я на паскале, а по ключевым словам я уже говорил что пробовал искать, там либо чистый готовый код, либо ссылки битые, либо какие-то основы комбинаторики, где только говорится как количество вариантов подсчитать, а не как сделать оптимальный алгоритм чтобы он перебирал все значения, причём без повторений.
В каком смысле оптимальный? У тебя в любом случае ответ даёт "комбинаторный взрыв" по использованию памяти. Поэтому C++-ый вариант c next_permutation часто удобнее всего. Если действительно необходимо получить
все перестановки одновременно — прогоняешь в цикле next_permutation до тех пор, пока он может выполнить следующую перестановку, и на каждом шаге копируешь очередную перестановку в результирующий контейнер контейнеров:
while ( next_permutation(start, end) )
{
copy(start, end, resContIt) ;
}
(Понятно, что исходно контейнер [start,end) должен быть отсортирован.)
А сам next_permutation реализовать не очень сложно, см., например,
здесь.