Передача копии массива в рекурсии
При написании 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;
}
}
}