kosola

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Предположим есть элементы s1 s2 s3 s4 s5... Необходимо получить массив всех возможных уникальных перестановок. Второй день ломаю голову, знаю что нужна рекурсия, но ничего путного написать не могу. Нашел в сети вариант на паскале переписал его на php, но либо я ошибся, либо алгоритм не верный, так как он некоторые перестановки пишет по 2 раза. Код: function Change(&$a,&$b) { $c = $a; $a = $b; $b = $c; } function replaceElement($string, $num) { if ($num == count($string)-1) { for ($i = 0 ; $i < count($string); $i++) print($string[$i].' '); print("\r\n"); } else for ($i = 0 ; $i < count($string)-1; $i++) { Change($string[$num+1], $string[$i]); replaceElement($string, $num+1); Change($string[$num+1], $string[$i]); } } | Добавлено: Думаю этот алгоритм такой же "полезный" как все остальные написанные мною ранее по данному вопросу, так как с 3мя значениями он не отображает всех вариантов... P.S.: количество перестановок должно быть N! (факториал), где N - количество элементов. |