выберите массив для действия в функции без версии функции для каждой копии массива

Я пытаюсь применить алгоритм минимаксного типа к игре типа Реверси / Отелло — проблема, которую я нахожу, состоит в том, что каждому 1/2 слоя понадобится своя «поддельная» игровая доска для тестирования.

Таким образом, оказывается, что, поскольку массивы не могут быть переданы в качестве параметров, мне либо нужна функция с 64 параметрами и массивом для каждого 1/2 слоя, либо мне нужно передать копии кода функций и массивов для каждого слоя (т.е. checkMovePly1, checkMovePly2 и т. д.) или создайте массивы локально (в этот момент ИИ, предпринимающий ход, будет приводить к генерации и созданию 64 ^ (2 * ply) массивов за каждый ход, что может показаться несколько медленным).

Если я смогу решить проблему с массивом, похоже, что он должен работать на несколько слоев, так как это будет сложность времени O (64 ^ (2 * слой)), хотя в зависимости от метода, который может быть 64 ^ (2 * Создавайте и уничтожайте массивы.

Любая идея, как обойти проблему множественных массивов, это разумный подход?

0

Решение

C ++ предоставляет различные контейнеры, которые должны быть предпочтительнее массивов. В этом случае я бы предложил std::array, Если у вас нет std::array, std::vector тоже будет работать.

void foobar(std::array<int, 64> board);

Эта функция скопирует массив, переданный по значению.

0

Другие решения

Первые массивы могут быть переданы как параметры, но вызываемая функция будет работать непосредственно с исходным массивом, а не с его собственной копией (будьте осторожны).

void foo(int[8][8] board);

Во-вторых, стандартные (или пользовательские, если необходимо) классы контейнеров безопаснее использовать и легче копировать при необходимости. Нативные массивы нелегко копировать без каких-либо хакерских уловок, и в этом случае использование контейнерных классов должно в любом случае облегчить чтение вашего кода.

В-третьих, эта проблема выглядит как классический предмет для рекурсивного алгоритма, который может позволить выполнять всю работу на одном и том же экземпляре массива (или класса-контейнера), сохраняя тем самым ваши требования к ресурсам O (1): фиксированный размер игрового поля и известное максимальное оживление глубина.

0

По вопросам рекламы [email protected]