Number of shortest paths to reach every cell from bottom-left cell in the grid

• Last Updated : 20 Sep, 2021

Given two number N and M. The task is to find the number of shortest paths to reach the cell(i, j) in the grid of size N × M when the moves started from the bottom-left corner
Note: cell(i, j) represents the ith row and jth column in the grid
Below image shows some of the shortest paths to reach cell(1, 4) in 4 × 4 grid Examples :

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

Approach : An efficient approach is to compute the grid starting from the bottom-left corner.

• The number of shortest paths to reach cell(n, i) is 1, where, 1 < = i < = M
• The number of shortest paths to reach cell(i, 1) is 1, where, 1 < = i < = N
• The number of shortest paths to reach cell(i, j) are the sum the number of shortest paths of cell(i-1, j) and (i, j+1), where, 1 < = j < = M and 1 < = i < = N

Below is the implementation of the above approach :

C++

 // CPP program to find number of shortest paths #include 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



Output :

1 5
1 4
1 3
1 2
1 1

Time complexity: O(N × M)

My Personal Notes arrow_drop_up
Recommended Articles
Page :