Наоборот, по моему я то как раз и предлагаю простой вариант.
"Сложный" в смысле "вычислительно сложный". Впрочем, если речь о С++, то и сложнее в реализации, т.к. самая сложная в моём случае часть - генерация следующей перестановки - уже есть в next_permutation, всё остальное же это всего лишь проверки текущих выбранных цифр.
Добавлено
Т.е. схема любого алгоритма перебора выглядит так:
1) Предварительные действия
2) Генерируем очередной набор цифр. Если сгенерировался - п.3, иначе п.4
3) Проверяем его, и идём в п.2
4) Конец алгоритма
1) зависит от алгоритма перебора, 3) нужен всем. 2 для каждого случая индивидуальный, и у тебя он будет рекурсией или ещё чем-то громоздким, у меня же всего лишь одной строкой.