Re: Перебор
От: Кодт Россия  
Дата: 01.08.03 15:29
Оценка: 3 (1)
Здравствуйте, Alick, Вы писали:

A>Что-то у меня затык произошел. Никак не могу сообразить, как написать алгоритм перебора с переменным количеством параметров. Т.е. требуется получить таблицу значений функции f(x1, x2...) для всех целых xi, заданных на определенном диапазоне. Притом, количество переменных (imax) заранее не известно.


A>Подкиньте идею, желательно в коде на "C" (не С++). И, если можно, без рекурсии.


Многоразрядный счетчик
// типа абстракция задачи :)

int n;
int lbound[n];
int ubound[n];
int x[n]; // текущие значения; lbound[i] <= x[i] < ubound[i]

void f(int *x); // передаем внутрь массив длины n

///////////////////////////////////

void init()
{
  int i;
  for(i = 0; i < n; ++i)
    x[i] = lbound[i];
}

int step() // 0 -- дальше некуда
{
  for(i = 0; i < n; ++i)
  {
    if(++x[i] < ubound[i])
      return 1;
    x[i] = lbound[i];
    // перенос в следующий разряд
  }
  return 0; // переполнение
}

void run()
{
  init();
  do
  {
    f(x);
  }
  while(step());
}

Если хочется — функции init(), step() можно заинлайнить внутри run().
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.