Estoy trabajando en un proyecto de investigación y me encontré con este problema. Tenía curiosidad por saber si existe una estrategia para contar la cantidad de rutas de A a B, usando nodos libres y evitando los nodos bloqueados.
El punto de partida siempre es la esquina inferior izquierda y el punto final siempre es la esquina superior derecha. Sólo podemos movernos hacia arriba o hacia la derecha.
Los nodos bloqueados siempre aparecen en la esquina superior izquierda de la cuadrícula. No hay ningún nodo libre en el lado izquierdo, o encima de cualquier nodo prohibido.
Puedo encontrar la respuesta usando algoritmos de búsqueda, pero eso no es eficiente, especialmente con problemas a gran escala. Tenía curiosidad por saber si hay una mejor expresión/estrategia matemática para este problema. ¡Gracias! Esto es un ejemplo:
Una forma de hacerlo es por inclusión-exclusión .
Basta con excluir el nodo inferior prohibido de cada columna. En tu ejemplo, estos son los nodos. , , y . Denote el conjunto de estos nodos por y el número de caminos que usan todos los nodos en un conjunto por . Entonces por inclusión-exclusión el número de caminos admisibles es
Hay caminos desde a . Al insertar los nodos prohibidos como pasos intermedios, podemos escribir la suma anterior como
dónde son los nodos en en orden ascendente coordenadas, y y .
En tu ejemplo, esto es
Dejar sea el número de tales caminos desde a . Al considerar el último paso en , encontramos eso
Definir como el número de camino para llegar al punto de . Podemos llegar al punto de o . Por lo tanto se aplica la siguiente expresión: . Si se le permite usar la computadora, es muy simple. Por ejemplo, uso Excel como a continuación:
acabo de ingresar en la celda inferior izquierda, luego en las celdas bloqueadas.
Esto puede no ser importante, pero un caso muy especial es si las celdas bloqueadas forman un triángulo en la esquina superior izquierda, siendo la primera celda bloqueada
El número de ruta desde a convertirse
Digamos que tenemos un gráfico de cuadrícula de celosía de tamaño
. Ahora ponemos obstáculos en este gráfico con la siguiente regla:
si ponemos un obstáculo en un nodo, también ponemos obstáculos en todos los nodos al norte y al oeste de él.
En otras palabras, nuestros obstáculos siempre forman una pared que segmenta el gráfico en una parte que se puede atravesar y una parte que está bloqueada.
Llamemos a los nodos de obstáculos que no tienen nodos de obstáculos al sur o al este "nodos de obstáculos externos".
Podemos desmontar el gráfico original en una serie de gráficos de cuadrícula rectangular (sin obstáculos):
Ahora contamos los caminos de A a B usando los bordes entre las cuadrículas rectangulares.
Dejar ser los nodos de obstáculo exterior.
si tenemos un
cuadrícula rectangular (es decir,
a
), entonces hay
maneras de llegar desde la esquina suroeste a la esquina noreste.
De manera similar, tenemos que el número de caminos desde
a
es
Usando esto, nuestra recursividad es:
Añadiendo
y
,
nos da el número de caminos desde
a
.
Formulando esta recursividad como un programa dinámico, se puede lograr un tiempo de ejecución de (dónde es el número de nodos de obstáculos exteriores, para los que siempre se cumple ).
Sudix