Как найти все возможные заказы с элементом массива - PullRequest
4 голосов
/ 16 января 2012

Вот массив.

$item = array('A', 'B', 'C', 'D');

Я хочу перечислить все возможные ордера в этом массиве, например:

A
A, B
А, В, С
А, В, С, D
А, С
А, С, D
А, С, В
...
B, A
В, А, С
....

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 16 января 2012

перестановок , которые вы хотите знать, можно выполнить с помощью этого алгоритма и применения в цикле для подмножеств.

Инициализируйте первую перестановку с помощью<1 <2 ... <p>пока существует мобильное целое число

найдите наибольшее мобильное целое число k

swap k и смежное целое число, на которое оно смотрит

обратное направление всех целых чисел больше k

См. этот вопрос для получения дополнительной информации

1 голос
/ 16 января 2012

Вы можете использовать эту рекурсивную функцию:

<code>function recursive_permutations($items,$perms = array( ))
{
 static $list;
 if (empty($items)) {
  $list[] = join(',', $perms);
 } else {
  for ($i = count($items)-1;$i>=0;--$i) {
   $newitems = $items;
   $newperms = $perms;
   list($foo) = array_splice($newitems, $i, 1);
   array_unshift($newperms, $foo);
   recursive_permutations($newitems, $newperms);
  };
  return $list;
 };
}
$perms = recursive_permutations(array('A', 'B', 'C', 'D'));
echo '<pre>' . print_r($perms, true) . '
';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...