Задача про ловушку

Спроектирован робот который несет бремя из точки 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

А ПЕРВЫЙ КОД ВООБЩЕ РАБОТАЕТ НЕ ДЛЯ ВСЕХ ВАРИАНТОВ!!!


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