AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2008, 00:08   #31  
avf is offline
avf
Участник
 
31 / 24 (1) +++
Регистрация: 28.06.2007
перестановки: Всё гениальное - простынь)
Произвольную перестановку можно представить в виде суперпозиции транспозиций соседних элементов. [[Липский] Комбинаторика_для программистов.] Т.е. достаточно n! раз последовательно попарно переставить соседние элементы:
X++:
#define.CONDATA([' a', ' b', ' c'])
static void Transpositions(Args _args)
{
    Container       con = #CONDATA;
    Int             pos = 1,
                    len = conlen(con),
                    transCount = factorial(len);

    boolean anyMoreTrans()
    {;
        transCount--;
        return transCount;
    }

    void swap(int _i, int _j)
    {
        AnyType tmp = conpeek(con, _i);
        ;
        con = conpoke(con, _i, conpeek(con, _j));
        con = conpoke(con, _j, tmp);
    }

    void swapNextPair()
    {
        Int nextPos = (pos == len) ? 1 : pos+1;
        ;
        swap(pos, nextPos);
        pos = nextPos;
    }
    ;

    setprefix("Перестановки:");
    info(con2Str(con));
    while (anyMoreTrans())
    {
        swapNextPair();
        info(con2Str(con));
    }
}
За это сообщение автора поблагодарили: ivas (1).
Теги
логические задачи

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ARIS-задачи itfs Курилка 9 02.11.2006 12:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:00.