Задача про ловушку
Спроектирован робот который несет бремя из точки A в точку B.
Чтобы протестировать робота была выбрана матрица размером n x m, по которой робот должен передвигаться из точки (0, 0) к точке (n, m).
Робот имеет два варианта для продвижения, сверху вниз и справа налево.
Если значение поля i, j матрицы равно -1, это значит, что там находится ловушка, которая может навредить роботу. Что, в свою очередь, означает, что робот не может наступить на это поле.
Нужно написать функцию которая получает матрицу и вернет true, если робот сможет из точки (0, 0) дойти до точки (n, m), а в противоположном случае false.
Например
A = [
[0, 0, 0, -1, 0],
[-1, 0, 0, -1, -1],
[0, 0, 0, -1, 0],
[-1, 0, 0, 0, 0],
[0, 0, -1, 0, 0]
]
B = [
[0, 0, -1],
[0, -1, -1],
[-1, -1, 0]
]
Робот сможет дойти до конечной в случае матрицы A, а в случае B не сможет.
console.log([
[0, 0, 0, -1, 0],
[-1, 0, 0, -1, -1],
[0, 0, 0, -1, 0],
[-1, 0, 0, 0, 0],
[0, 0, -1, 0, 0]
]); // true
console.log([
[0, 0, -1],
[0, -1, -1],
[-1, -1, 0]
]); // false
console.log([
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]); // true
console.log([
[0, 0, 1],
[1, 0, -1],
[0, -1, 0]
]); // false
Поможете решить задачу?
ЗАРАНЕЕ ГОВОРЮ ЧТО ОТВЕТЫ ЗДЕСЬ НЕ ПРАВИЛЬНЫ!!! Задача про ловушку. Алгоритм поиска пути
ЭТОТ КОД ВОЗВРАЩАЕТ ОШИБКУ Uncaught TypeError: Cannot read property '0' of undefined при [[0,0,1],[1,0,0]]
function copyMatrix(matrix){
let copied_matrix = [];
for (let i = 0; i < matrix.length; i++){
copied_matrix[i] = []
for (let j = 0; j < matrix[0].length; j++)
copied_matrix[i][j] = matrix[i][j] == - 1 ? -1: 0
}
return copied_matrix
}
function traverse(matrix){
const copied_matrix = copyMatrix(matrix)
copied_matrix[0][0] = 1;
for (let i = 0; i < copied_matrix[0].length; i++){
for (let j = 0; j < copied_matrix.length; j++){
if(copied_matrix[i][j] != -1) {
if(j != 0 && copied_matrix[i][j - 1] == 1)
copied_matrix[i][j] = 1
if(i != 0 && copied_matrix[i - 1][j] == 1)
copied_matrix[i][j] = 1}
}
}
return copied_matrix[copied_matrix.length - 1][copied_matrix[0].length - 1] == 1
}
console.log(traverse([[0,0,0,-1,0],[-1,0,0,-1,-1],[0,0,0,-1,0],[-1,0,0,0,0],[0,0,-1,0,0]])) //true
console.log(traverse([[0,0,-1],[0,-1,-1],[-1,-1,0]])) //false
console.log(traverse([[0,0,0],[0,0,0],[0,0,0]])) //true
console.log(traverse([[0,0,1],[1,0,-1],[0,-1,0]])) //false
console.log(traverse([[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]])) //false
console.log(traverse([])) //false
console.log(traverse([[0,0,1],[1,0,0]])) //true
А ПЕРВЫЙ КОД ВООБЩЕ РАБОТАЕТ НЕ ДЛЯ ВСЕХ ВАРИАНТОВ!!!