Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
Resolviendo el camino más largo en matriz

Entonces, esta es la pregunta para encontrar el camino más largo de 1 en una matriz de 0 y 1 desde las coordenadas iniciales hasta las coordenadas finales.

Aquí está la solución que descubrí de alguna manera y que también entiendo (casi). Aunque tengo problemas para entender una línea de esto:

 function longestPath02(matrix, startPosition, endPosition) { let maxDistance = 0; const visited = {}; function isValidCoordinate(i, j) { // check if the coordinates are in valid range // if (i < 0 || i > matrix.length - 1 || j > matrix[0].length - 1 || j < 0) return false; if (i > matrix.length - 1 || i < 0 || j > matrix[0].length - 1 || j < 0) return false; // check if the coordinate is one AND not visited if ((matrix[i] || [])[j] !== 1 || visited[`${i},${j}`]) return false; return true; } function calculate(startPosition, endPosition, distance) { const [i, j] = startPosition; const [x, y] = endPosition; if (i === x && j === y) { maxDistance = Math.max(distance, maxDistance); return; } visited[`${i},${j}`] = true; if (isValidCoordinate(i + 1, j)) calculate([i + 1, j], endPosition, distance + 1); if (isValidCoordinate(i - 1, j)) calculate([i - 1, j], endPosition, distance + 1); if (isValidCoordinate(i, j + 1)) calculate([i, j + 1], endPosition, distance + 1); if (isValidCoordinate(i, j - 1)) calculate([i, j - 1], endPosition, distance + 1); visited[`${i},${j}`] = false; // 👈 } calculate(startPosition, endPosition, 0); return maxDistance; }

¡No puedo entender por qué tenemos que establecer visitado como falso!

Sin eso, el resultado es incorrecto. ¿Cómo es relevante establecer la coordenada visitada como falsa?

Conjunto de datos:

 let mat = [ [1, 0, 1, 1, 1, 1, 0, 1, 1, 1], [1, 0, 1, 0, 1, 1, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1, 0, 1, 0, 1], [0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [1, 0, 0, 0, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 1, 1, 1, 1, 0, 0, 1, 1], [1, 1, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 1, 1, 1, 1, 0, 1, 0, 0], ]; console.log(longestPath02(mat, [0, 0], [5, 7]));
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si entiendo el código correctamente, la línea resaltada está retrocediendo.

Considere esta línea: visited[`${i},${j}`] = true; . El propósito de esta línea es evitar que el DFS recursivo visite un punto que acaba de visitar (de lo contrario, simplemente obtendrá un bucle recursivo).

Pero una vez que haya terminado con esa ruta, debe "restablecer", razón por la cual la configura en falso al final. ¡La razón es que de lo contrario, está impidiendo que futuras llamadas recursivas accedan a ese elemento! En otras palabras, una vez que haya terminado de recorrer un camino, debe liberarlo para que otro camino pueda acceder a ese elemento si es necesario (de lo contrario, ese camino se confundirá y dejará de pensar que ya ha accedido a un elemento cuando no lo ha hecho). t).

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda