Counts paths from a point to reach Origin

You are standing on a point (n, m) and you want to go to origin (0, 0) by taking steps either left or down i.e. from each point you are allowed to move either in (n-1, m) or (n, m-1). Find the number of paths from point to origin.

Examples:

Input : 3 6
Output : Number of Paths 84

Input : 3 0
Output : Number of Paths 1




As we are restricted to move down and left only we would run a recursive loop for each of the combinations of the
steps that can be taken.

// Recursive function to count number of paths
countPaths(n, m)
{
    // If we reach bottom or top left, we are
    // have only one way to reach (0, 0)
    if (n==0 || m==0)
        return 1;

    // Else count sum of both ways
    return (countPaths(n-1, m) + countPaths(n, m-1));
} 

Below is the implementation of above steps.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count total number of
// paths from a point to origin
#include<bits/stdc++.h>
using namespace std;
  
// Recursive function to count number of paths
int countPaths(int n, int m)
{
    // If we reach bottom or top left, we are
    // have only one way to reach (0, 0)
    if (n==0 || m==0)
        return 1;
  
    // Else count sum of both ways
    return (countPaths(n-1, m) + countPaths(n, m-1));
}
  
// Driver Code
int main()
{
    int n = 3, m = 2;
    cout << " Number of Paths " << countPaths(n, m);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count total number of
// paths from a point to origin
import java.io.*;
  
class GFG {
      
    // Recursive function to count number of paths
    static int countPaths(int n, int m)
    {
        // If we reach bottom or top left, we are
        // have only one way to reach (0, 0)
        if (n == 0 || m == 0)
            return 1;
      
        // Else count sum of both ways
        return (countPaths(n - 1, m) + countPaths(n, m - 1));
    }
      
    // Driver Code
    public static void main (String[] args)
    {
        int n = 3, m = 2;
        System.out.println (" Number of Paths "
                            + countPaths(n, m));
          
    }
}
  
// This code is contributed by vt_m

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to count
# total number of
# paths from a point to origin
# Recursive function to 
# count number of paths
def countPaths(n,m):
  
    # If we reach bottom
    # or top left, we are
    # have only one way to reach (0, 0)
    if (n==0 or m==0):
        return 1
   
    # Else count sum of both ways
    return (countPaths(n-1, m) + countPaths(n, m-1))
  
# Driver Code
n = 3
m = 2
print(" Number of Paths ", countPaths(n, m))
  
# This code is contributed
# by Azkia Anam.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count total number of
// paths from a point to origin
using System;
          
public class GFG {
      
    // Recursive function to count number
    // of paths
    static int countPaths(int n, int m)
    {
          
        // If we reach bottom or top left,
        // we are have only one way to
        // reach (0, 0)
        if (n == 0 || m == 0)
            return 1;
      
        // Else count sum of both ways
        return (countPaths(n - 1, m) 
                 + countPaths(n, m - 1));
    }
      
    // Driver Code
    public static void Main ()
    {
        int n = 3, m = 2;
          
        Console.WriteLine (" Number of"
         + " Paths " + countPaths(n, m));
          
    }
}
  
// This code is contributed by Sam007.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count total number
// of paths from a point to origin
  
// Recursive function to 
// count number of paths
function countPaths($n, $m)
{
      
    // If we reach bottom or 
    // top left, we are
    // have only one way to
    // reach (0, 0)
    if ($n == 0 || $m == 0)
        return 1;
  
    // Else count sum of both ways
    return (countPaths($n - 1, $m) + 
            countPaths($n, $m - 1));
}
  
    // Driver Code
    $n = 3; 
    $m = 2;
    echo " Number of Paths " 
      , countPaths($n, $m);
  
// This code is contributed by aj_36
?>

chevron_right



Output:

Number of Paths 10

We can use Dynamic Programming as there are overlapping subproblems. We can draw recursion tree to see overlapping problems. For example, in case of countPaths(4, 4), we compute countPaths(3, 3) multiple times.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count total number of
// paths from a point to origin
#include<bits/stdc++.h>
using namespace std;
  
// DP based function to count number of paths
int countPaths(int n, int m)
{
    int dp[n+1][m+1];
  
    // Fill entries in bottommost row and leftmost
    // columns
    for (int i=0; i<=n; i++)
      dp[i][0] = 1;
    for (int i=0; i<=m; i++)
      dp[0][i] = 1;
  
    // Fill DP in bottom up manner
    for (int i=1; i<=n; i++)
       for (int j=1; j<=m; j++)
          dp[i][j] = dp[i-1][j] + dp[i][j-1];
  
    return dp[n][m];
}
  
// Driver Code
int main()
{
    int n = 3, m = 2;
    cout << " Number of Paths " << countPaths(n, m);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count total number of
// paths from a point to origin
import java.io.*;
  
class GFG {
      
    // DP based function to count number of paths
    static int countPaths(int n, int m)
    {
        int dp[][] = new int[n + 1][m + 1];
      
        // Fill entries in bottommost row and leftmost
        // columns
        for (int i = 0; i <= n; i++)
            dp[i][0] = 1;
        for (int i = 0; i <= m; i++)
            dp[0][i] = 1;
      
        // Fill DP in bottom up manner
        for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
      
        return dp[n][m];
    }
      
    // Driver Code
    public static void main (String[] args) {
        int n = 3, m = 2;
        System.out.println(" Number of Paths "
                           + countPaths(n, m));
          
    }
}
  
// This code is contributed by vt_m

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to count total 
# number of paths from a po to origin
  
# Recursive function to count
# number of paths
def countPaths(n, m):
  
    # If we reach bottom or top 
    # left, we are have only one 
    # way to reach (0, 0)
    if (n == 0 or m == 0):
        return 1
  
    # Else count sum of both ways
    return (countPaths(n - 1, m) + 
            countPaths(n, m - 1))
  
# Driver Code
n = 3
m = 2
print("Number of Paths",
       countPaths(n, m))
  
# This code is contributed by ash264

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count total number of
// paths from a point to origin
using System;
          
public class GFG {
      
    // DP based function to count number
    // of paths
    static int countPaths(int n, int m)
    {
        int [,]dp = new int[n + 1,m + 1];
      
        // Fill entries in bottommost row
        // and leftmost columns
        for (int i = 0; i <= n; i++)
            dp[i,0] = 1;
        for (int i = 0; i <= m; i++)
            dp[0,i] = 1;
      
        // Fill DP in bottom up manner
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                dp[i,j] = dp[i - 1,j]
                         + dp[i,j - 1];
          
        return dp[n,m];
    }
      
    // Driver Code
    public static void Main ()
    {
        int n = 3, m = 2;
          
        Console.WriteLine(" Number of"
        + " Paths " + countPaths(n, m));
          
    }
}
  
// This code is contributed by Sam007.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to count total number of
// paths from a point to origin
  
// DP based function to 
// count number of paths
function countPaths($n, $m)
{
      
    //$dp[$n+1][$m+1];
    // Fill entries in bottommost
    // row and leftmost columns
    for ($i = 0; $i <= $n; $i++)
        $dp[$i][0] = 1;
          
    for ($i = 0; $i <= $m; $i++)
        $dp[0][$i] = 1;
  
    // Fill DP in bottom up manner
    for ($i = 1; $i <= $n; $i++)
    for ($j = 1; $j <= $m; $j++)
        $dp[$i][$j] = $dp[$i - 1][$j] + 
                      $dp[$i][$j - 1];
  
    return $dp[$n][$m];
}
  
    // Driver Code
    $n = 3;
    $m = 2;
    echo " Number of Paths " , countPaths($n, $m);
  
// This code is contributed by m_kit
?>

chevron_right



Output:

Number of Paths 10

This article is contributed by Nikhil Rawat. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t, ash264