Я пытаюсь решить упражнение в рекурсии, которое выглядит следующим образом.
Скажем, у вас есть матрица nxm с целыми числами, как это (просто пример):
1 1 1 5 2
2 3 5 2 1
3 1 1 1 5
1 1 5 1 1
Я хочу найти путь (начиная с любого места), который, учитывая число n, каждый шаг n изменяется на n / (number_at_that_position) и путь останавливается, когда n = 1.
Я не ищу все пути, я просто ищу путь.
Поэтому, если вы используете символы для отображения пути, вы получите матрицу
> > V - *
- - V > ^
- - V ^ -
- - > ^ -
Где «>» означает шаг вправо, «<» означает шаг влево, «^» - это шаг вверх, а «V» - это шаг вниз. Как только n становится 1, мы вставляем '*', чтобы сказать, что путь закончился.
Самое важное: путь должен быть непрерывным, и вы не можете посетить место, которое посетили раньше.
Еще более важно: функция, которая находит путь, ДОЛЖНА быть рекурсивной.
Если путь не найден, код завершается с сообщением о том, что путь не найден. </p>
До сих пор я придумал следующий код для поиска пути. Я использовал идеи из разных мест, но одно из них это Рекурсивное нахождение пути через лабиринт c ++
bool path_print(vector<vector<int> > &P, size_t line, size_t col, vector<vector<char> > &A, int n) {
if (line < 0 || line > P.size() || col < 0 || col > P[0].size()) {
return false;
}
if (A[line][col] != '-') {
return false;
}
if (n == 1) {
A[line][col] = '*';
return false;
}
printf("n = %d, line = %zu, col = %zu\n", n, line, col);
n = n/P[line][col];
if (path_print(P, line, col+1, A, n) == true){
A[line][col] = '>';
return true;
} else if (path_print(P, line-1, col, A, n) == true) {
A[line][col] = '^';
return true;
} else if (path_print(P, line+1, col, A, n) == true){
A[line][col] = 'V';
return true;
} else if (path_print(P, line, col-1, A, n) == true){
A[line][col] = '<';
return true;
}
return true;
}
P - вектор, содержащий значения
A является вектором char, который хранит путь
n - фактическое число, которое вы проверяете
Я работал над этим некоторое время и застрял. Этот код не работает должным образом. Любые предложения или помощь будет принята с благодарностью.
Заранее спасибо