У меня есть этот проект, над которым я работаю для класса, и я не ищу ответа, но, возможно, всего несколько советов, так как я не чувствую, что использую истинную рекурсию , Проблема заключается в решении игры Hi Q или «peg solitaire», в которой вы хотите, чтобы конечный результат оставался на одном конце (он играл с треугольной доской, и одно место открыто с самого начала.)рекурсия C++ с массивами
Я представлял плата с простым массивом, причем каждый индекс является пятном и имеет значение 1, если он имеет привязку, а 0, если нет, а также набор действительных ходов с 2-мерным массивом, который равен 36, 3 (каждый набор перемещений содержит 3 числа, привязку, которую вы перемещаете, привязка переполнения и индекс назначения.)
Итак, моя проблема в том, что в моей рекурсивной функции я использую много итераций для определения вещей например, какое пространство открыто (или имеет значение 0) и которое перемещается для использования в зависимости от того, какое пространство открыто, перебирая массивы. Во-вторых, я не понимаю, как вы могли бы вернуться назад с рекурсией, в случае, если был сделан неправильный ход, и вы хотели вернуться к этому, чтобы выбрать другой.
Это то, что у меня есть до сих пор; массив «a» представляет плату, массив «b» представляет перемещение, а массив «c» - это моя идея напоминания о том, какие шаги я использовал уже. Используемые функции - вспомогательные функции, которые в основном просто проходят через массивы, чтобы найти пустое пространство и соответствующий ход. :
void solveGame(int a[15], int b[36][3], int c[15][3]){
int empSpace;
int moveIndex;
int count = 0;
if(pegCount(a) < 2){
return;
}
else{
empSpace = findEmpty(a);
moveIndex = chooseMove(a, b, empSpace);
a[b[moveIndex][0]] = 0;
a[b[moveIndex][1]] = 0;
a[b[moveIndex][2]] = 1;
c[count][0] = b[moveIndex][0];
c[count][1] = b[moveIndex][1];
c[count][2] = b[moveIndex][2];
solveGame(a,b,c);
}
}
«backtrack с рекурсией, в случае, если был сделан неправильный ход, и вы хотели сделать это движение назад» - обычно вы хотите, чтобы функция перечислила список ходов, которые являются законными в ситуации, описываемой его параметрами, а затем называть себя передаваемыми измененными параметрами, которые описывают ситуацию, возникающую в результате этого перемещения. Функция должна вернуть признак успеха, поэтому вы можете остановить повторение возможных ходов. Или вы можете найти лучший ход - перебрать все потенциальные ходы, но помните, какая из них лучше всего работала, и функция возвращала некоторую меру. –