Dada una matriz NxN, ¿cómo podría encontrar todos los caminos posibles a una ubicación (i, i)?
Frecuentes
Visto 6,361 equipos
2
Dado un NxN
matriz, ¿cómo podría encontrar todos los caminos posibles a una ubicación? (i,i)
. La navegación sería sólo downwards
y hacia el right
. El punto de partida sería (0,0)
.
PD No es una tarea.
6 Respuestas
2
Lo más fácil (para mí) sería hacerlo recursivamente:
1) la condición de parada estaría llegando a (i,i)
2) intentaría dos movimientos siguientes en cada nivel de recursión:
- puedes bajar
- puedes ir a la derecha
Asumiendo que su posición actual es (x,y): No puede ir a la derecha si su actual "y" más 1 sería mayor que "i" en (i,i). No puede bajar si su actual "x" más 1 sería más grande que "i" en el (i,i).
Solo tendría que recordar la ruta en alguna variable o pasarla hacia abajo e imprimirla cuando ocurra la condición de parada.
Entonces, suponiendo que comience en (0,0), recuerde esto y luego verifique si puede ir hacia la derecha o hacia abajo, si es así para ambos, llame recursivamente a este mismo método para (0,1) y (1,0).
Respondido 31 Jul 12, 14:07
Tenía lo mismo en mente, pero estaba pensando en cómo almacenar la ruta y no pensé en la idea de pasar la ruta actual por la recursividad. Muchas gracias. - Rahul
2
?
A una ubicación (i, i), es decir, una en la diagonal, hay exactamente peine (i, 2 * i) caminos (número de formas de seleccionar i elementos de un conjunto de 2 * i elementos), cada uno de los cuales consta de i movimientos hacia la derecha y hacia abajo. Enumerarlos es trivial.
Respondido 31 Jul 12, 14:07
2
Aunque puede usar DP para resolver esto, esto es solo matemática simple:
Tienes que hacer 2i
pasos, de los cuales i
debe ser pasos a la derecha. Las combinaciones totales son C(2i,i)
. Ver: calcular los coeficientes binomiales.
Otro problema similar es donde no puedes cruzar la diagonal, llamado camino monótono, por lo que lo interesante Número catalán La secuencia es la solución.
Respondido 31 Jul 12, 16:07
1
Mire el problema desde un ángulo de 45 grados. Verás que estás tratando de calcular el número de caminos a un vértice en una matriz triangular. La solución está dada por Triángulo de Pascal.
2i choose i
Respondido 31 Jul 12, 18:07
1
Solución 1 - Usando programación dinámica:
Sume las soluciones de abajo hacia arriba hasta los índices (i, j) que desee:
ans(i,i) = ans(i-1,j) + ans(i,j-1)
y use lo mismo para la posición (i,i).
Solución 2: uso de permutaciones y combinaciones simples
respuesta = (2i)!/ i!i!
(Ya que tienes que elegir cualquiera de los i pasos hacia la derecha y ji pasos hacia abajo comenzando desde (0,0) y el total son 2i pasos).
Respondido 22 Abr '15, 17:04
1
Depende cuando comience desde (0,0) o en una ubicación aleatoria en la matriz.
Si es (0,0) ; use Profundidad primero para ir hasta el final de una rama y luego las otras. Use Breadth First para iterar a través de todos los nodos vecinos en un paso. Compruebe solo los nodos hacia abajo y hacia la derecha.
Si está en una ubicación aleatoria en la matriz, debe rastrear los 4 nodos vecinos.
Respondido 10 Feb 16, 13:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas algorithm data-structures or haz tu propia pregunta.
¿Dónde está el punto de partida? (0,0)? - Mateusz Dymczyk
@Zenzen Sí, asumiendo que el punto de partida es (0,0) - Rahul