Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Перебор комбинаций нескольких массивов


Автор: kb64 15.7.2010, 09:25
Есть двумерный массив
Код


ArrayList <String> a= {"A","S","D"};
ArrayList <String> b= {"Z","X","C"};


Я понимаю, что есть слово "рекурсия", я знаю что оно обозначает, но не понимаю как сделал перебор вариантов.

String resultstring должна быть:
AZ,
SZ,
DZ,
AX,
SX,
DX
и т.д.
Помогите сделать.

Заранее благодарен. 

Автор: ksili 15.7.2010, 09:52
Зачем рекурсия? 
Просто два вложенных цикла. Один по элементам первого массива, второй по элементам второго массива. В теле цикла создается одна строка.

Автор: Silent 15.7.2010, 09:58
Нерекурсивный вариант:
Код

for (int i = 0; i < a.size; i++)
  for (int j = 0; j < b.size; j++)
  {
    string resultstring = a[i] + b[j];
    cout << resultstring << endl;
  }


С использованием рекурсии:
Код

void res(int x)
{
  int i = x / b.size;
  int j = x % b.size;
  if ((i < a.size)&&(j < b.size))
  {
    string resultstring = a[i] + b[j];
    cout << resultstring << endl;
    res(x+1);
  }
}

int main()
{
  res(0);
  return 0;
}

Автор: kb64 15.7.2010, 10:13
Цитата(ksili @ 15.7.2010,  09:52)
Зачем рекурсия? 
Просто два вложенных цикла. Один по элементам первого массива, второй по элементам второго массива. В теле цикла создается одна строка.

Забыл добавить, у меня динамическое число массивов, ибо считываю их из файла.

Автор: esperanto 16.7.2010, 16:45
Все равно можно без рекурсии
num_of_variations=arra1.size*array2.size*....;

for i=1 to num_of variations
   encode_num_to_special_combination(i);

end

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)