Передача копии массива в рекурсии

При написании AI для крестиков-ноликов столкнулся с проблемой, что в рекурсии (при переборе всех вариантов события) нужно передавать копию массива. Если делать передачу по ссылке, передается ссылка, а не копия, и я работаю с тем же самым массивом => перебираются не все варианты. Каким образом сделать передачу копии массива? Пробовал сделать массив переменной класса, так тоже перебираются не все варианты.

    void table::bestMove()
    {
        QChar field[3][3];
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                field[i][j] = m_field[i][j];
            }
        }
        int bestScore = -10000;
        int moveRow = 0;//todo
        int moveCol = 0;
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                if(field[i][j] == '1')
                {
                    field[i][j] = 'O';
                    int score = minimax(0, false, field);
                    field[i][j] = '1';
                    if(score > bestScore)
                    {
                        bestScore = score;
                        moveRow = i; //todo
                        moveCol = j;
                    }
                }
            }
        }
        setSign(moveRow, moveCol);
        qDebug() << "Set in" << moveRow << " " << moveCol;
    }
    int table::minimax(int depth, bool isMaximazing, QChar (&field)[3][3])
{
    QChar result = checkWin_2(field);
        if(result == 'X')
            return 10;
        else if(result == 'O')
            return -10;
        else if(result == 'D')
            return 0;
        if(isMaximazing)
        {
            int bestScore = -10000;
            for(int i = 0; i < 3; i++)
            {
                for(int j = 0; j < 3; j++)
                {
                    if(field[i][j] == '1')
                    {
                        field[i][j] = 'O';
                        int score = minimax(depth + 1, false, field);
                        field[i][j] = '1';
                        bestScore = std::max(score, bestScore);
                    }
                }
            }
            return bestScore;
        }
        else
        {
            int bestScore = 10000;
            for(int i = 0; i < 3; i++)
            {
                for(int j = 0; j < 3; j++)
                {
                    if(field[i][j] == '1')
                    {
                        field[i][j] = 'X';
                        int score = minimax(depth + 1, true, field);
                        field[i][j] = '1';
                        bestScore = std::min(score, bestScore);
                    }
                }
            }
            return bestScore;
        }
    }
}

Ответы (0 шт):