Número de caminos en una matriz MxN

Dada una cuadrícula MxN, ¿cuántos caminos puede haber para llegar a la celda inferior derecha desde la celda superior izquierda? Las únicas limitaciones son que uno no puede visitar una celda más de una vez, intenté verificar las otras soluciones, pero solo consideran movimientos hacia la derecha y hacia abajo, mientras que esta también puede tener movimientos hacia la izquierda y hacia arriba. Cualquier ayuda es apreciada :)

Por ejemplo, considere una matriz de 3x3, la convertí en un gráfico como se muestra a continuación:

ingrese la descripción de la imagen aquí

donde los números asociados con el nodo representan el número de celdas contando desde la parte superior izquierda hasta la parte inferior derecha, entonces la cantidad de rutas sería 12como se muestra a continuación: { {1, 2, 3, 6, 5, 4, 7, 8, 9}, { 1, 2, 3, 6, 5, 8, 9}, {1, 2, 3, 6, 9}, {1, 2, 5, 4, 7, 8, 9}, {1, 2, 5, 6, 9}, {1, 2, 5, 8, 9}, {1, 4, 5, 2, 3, 6, 9}, {1, 4, 5, 6, 9}, {1, 4, 5, 8, 9}, {1, 4, 7, 8, 5, 2, 3,6, 9}, {1, 4, 7, 8, 5, 6, 9}, {1, 4, 7, 8, 9} }

Las rutas anteriores se muestran a continuación:

ingrese la descripción de la imagen aquí

Aunque muestro todos y cada uno de los caminos aquí, no los necesito, solo necesito el recuento que indica el número de caminos posibles

¿Intentaste establecer una relación recursiva?
desafortunadamente, no soy tan bueno en matemáticas, es por eso que busco su ayuda :)
La pregunta del título se refiere a un METRO × norte matriz. presentas un 3 t i metro mi s 3 ejemplo, pero ¿por qué agregas el 2 , 4 -¿borde?
Les presento 3x3 ya que me fue sencillo de explicar, gracias corrigieron la pregunta, el (2,4)borde no debería haber estado ahí :)

Respuestas (3)

Si m == n, puede encontrar el número de rutas para llegar a la celda inferior derecha desde la celda superior izquierda usando una ligera modificación del problema de retroceso. Encuentra debajo el código en Java.

public class Robot {
    private static int count = 0;
    public static void main(String[] args) {
        Robot robot = new Robot();
        int m = 5, n = 5;
        boolean Visited[][] = new boolean[5][5];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++)
                Visited[i][j] = false;
        }
        robot.traverse(Visited, 0, 0, m, n);
        System.out.println(count);
    }
    /**
     * 
     * @param Visited array
     * @param index i
     * @param index j
     * @param max Row m
     * @param max column n
     */
    private void traverse(boolean Visited[][], int i, int j, int m, int n){
        if(i==m-1&&j==n-1){
            count++;
            return;
        }
        if(isSafe(i, j, m, n, Visited)){
            Visited[i][j]=true;
            traverse(Visited, i, j+1, m, n);
            traverse(Visited, i+1, j, m, n);
            traverse(Visited, i-1, j, m, n);
            traverse(Visited, i, j-1, m, n);
            Visited[i][j] = false;
        }
    }
    /**
     * 
     * @param index i
     * @param index j
     * @param max Row m
     * @param max Column n
     * @param Visited array
     * @return isSafe or not
     */
    private boolean isSafe(int i, int j, int m, int n, boolean Visited[][]){
        if(i>=0&&j>=0&&i<m&&j<n&&!Visited[i][j])
            return true;
        else
            return false;
    }

}
incluso es posible hacer esto para m != n caso también, pero estaba buscando alguna relación de recurrencia o función de generación que pueda resumir, gracias por publicar el código :)
Sí, también funcionará en ese caso m! = n.

Para el caso METRO = norte esto es OEIS A 007764 ; no se da ninguna forma cerrada, recurrencia o función generadora. Hay un enlace a este documento , que tiene información sobre asintóticos para este y otros problemas relacionados; Sin embargo, no lo he mirado en detalle. Finalmente, hay un stub de OEIS Wiki que da las cifras de norte METRO 6 y muestra signos de interrogación para otros valores a menos que METRO = norte o norte 2 .

@PruthviRaj: ¡De nada!

Como @Shailesh mencionó en los comentarios, puede hacer esto con una relación de recurrencia . Suponga que ha llegado a la esquina inferior izquierda por una serie de pasos. Ahora, retroceda un paso: ahora está en el nodo sobre la esquina o al lado. Si escribimos el número de formas de llegar al nodo de la esquina de un metro × norte rejilla como a metro , norte , entonces podemos escribir

a metro , norte = a metro , norte 1 + a metro 1 , norte
porque primero debes llegar al penúltimo nodo, y luego dar el último paso. Tenga en cuenta que a metro , norte = a norte , metro porque esencialmente estamos contando lo mismo. Los valores iniciales para esta recurrencia son a 1 , 1 = 1 , a metro , 0 = a 0 , metro = 0 .

Sin embargo, ahora surge un hecho interesante. Si escribes los valores de a metro , norte en una cuadrícula, verá que cada número es la suma del número de arriba y el número de al lado... ¡y la primera fila y la primera columna están llenas de 1! Esto no es más que (trata de encontrarlo tú mismo primero)

Triángulo de Pascal , y los números son coeficientes binomiales .

No, esta sería la solución cuando solo se permite una dirección horizontal y una dirección vertical. Ese es un problema diferente.
Ya encontré esto en Internet en otra pregunta, esto funcionó solo cuando los movimientos estaban restringidos a la derecha y hacia abajo.