Dados dos números N y M . La tarea es encontrar el número de caminos más cortos para llegar a la celda (i, j) en la cuadrícula de tamaño N × M cuando los movimientos comenzaron desde la esquina inferior izquierda
. Nota: la celda (i, j) representa la i-ésima fila y j-ésima columna en la cuadrícula La
imagen de abajo muestra algunas de las rutas más cortas para llegar a la celda (1, 4) en una cuadrícula de 4 × 4
Ejemplos:
Input : N = 3, M = 4 Output : 1 3 6 10 1 2 3 4 1 1 1 1 Input : N = 5, M = 2 Output : 1 5 1 4 1 3 1 2 1 1
Enfoque: un enfoque eficiente es calcular la cuadrícula a partir de la esquina inferior izquierda.
- El número de caminos más cortos para llegar a la celda (n, i) es 1, donde, 1 < = i < = M
- El número de caminos más cortos para llegar a la celda (i, 1) es 1, donde, 1 < = i < = N
- El número de caminos más cortos para llegar a la celda (i, j) es la suma del número de caminos más cortos de la celda (i-1, j) y (i, j+1), donde, 1 < = j < = M y 1 < = yo < = norte
A continuación se muestra la implementación del enfoque anterior:
C++
// CPP program to find number of shortest paths #include <bits/stdc++.h> using namespace std; // Function to find number of shortest paths void NumberOfShortestPaths(int n, int m) { int a[n][m]; for (int i = 0; i < n; i++) memset(a[i], 0, sizeof(a[i])); // Compute the grid starting from // the bottom-left corner for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < m; j++) { if (j == 0 or i == n - 1) a[i][j] = 1; else a[i][j] = a[i][j - 1] + a[i + 1][j]; } } // Print the grid for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << a[i][j] << " "; } cout << endl; } } // Driver code int main() { int n = 5, m = 2; // Function call NumberOfShortestPaths(n, m); return 0; }
Java
// Java program to find number of shortest paths class GFG { // Function to find number of shortest paths static void NumberOfShortestPaths(int n, int m) { int [][]a = new int[n][m]; // Compute the grid starting from // the bottom-left corner for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < m; j++) { if (j == 0 || i == n - 1) a[i][j] = 1; else a[i][j] = a[i][j - 1] + a[i + 1][j]; } } // Print the grid for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } } // Driver code public static void main(String[] args) { int n = 5, m = 2; // Function call NumberOfShortestPaths(n, m); } } // This code is contributed by Princi Singh
Python3
# Python 3 program to find # number of shortest paths # Function to find number of shortest paths def NumberOfShortestPaths(n, m): a = [[0 for i in range(m)] for j in range(n)] for i in range(n): for j in range(m): a[i][j] = 0 # Compute the grid starting from # the bottom-left corner i = n - 1 while(i >= 0): for j in range(m): if (j == 0 or i == n - 1): a[i][j] = 1 else: a[i][j] = a[i][j - 1] + \ a[i + 1][j] i -= 1 # Print the grid for i in range(n): for j in range(m): print(a[i][j], end = " ") print("\n", end = "") # Driver code if __name__ == '__main__': n = 5 m = 2 # Function call NumberOfShortestPaths(n, m) # This code is contributed by # Surendra_Gangwar
C#
// C# program to find number of shortest paths using System; class GFG { // Function to find number of shortest paths static void NumberOfShortestPaths(int n, int m) { int [,]a = new int[n, m]; // Compute the grid starting from // the bottom-left corner for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < m; j++) { if (j == 0 || i == n - 1) a[i, j] = 1; else a[i, j] = a[i, j - 1] + a[i + 1, j]; } } // Print the grid for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { Console.Write(a[i, j] + " "); } Console.Write("\n"); } } // Driver code public static void Main(String[] args) { int n = 5, m = 2; // Function call NumberOfShortestPaths(n, m); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // javascript program to find number of shortest paths // Function to find number of shortest paths function NumberOfShortestPaths(n , m) { var a = Array(n).fill().map(() => Array(m).fill(0)); // Compute the grid starting from // the bottom-left corner for (var i = n - 1; i >= 0; i--) { for (j = 0; j < m; j++) { if (j == 0 || i == n - 1) a[i][j] = 1; else a[i][j] = a[i][j - 1] + a[i + 1][j]; } } // Print the grid for (var i = 0; i < n; i++) { for (j = 0; j < m; j++) { document.write(a[i][j] + " "); } document.write("<br/>"); } } // Driver code var n = 5, m = 2; // Function call NumberOfShortestPaths(n, m); // This code is contributed by gauravrajput1 </script>
Producción :
1 5 1 4 1 3 1 2 1 1
Complejidad temporal: O(N × M), donde N es el número de filas y M es el número de columnas de la cuadrícula.
Espacio Auxiliar: O(N × M), donde N es el número de filas y M es el número de columnas de la grilla.
Publicación traducida automáticamente
Artículo escrito por abdullaswat73 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA