Number of ways a convex polygon of n+2 sides can split into triangles by connecting vertices

Given a convex polygon with n+2 sides. The task is to calculate the number of ways in which triangles can be formed by connecting vertices with non-crossing line segments.

Examples:

Input: n = 1
Output: 1
It is already a triangle so it can only be formed in 1 way.



Input: n = 2
Output: 2
It can be cut into 2 triangles by using either pair of opposite vertices.

The above problem is an application of a catalan numbers. So, the task is to only find the n’th Catalan Number. First few catalan numbers are 1 1 2 5 14 42 132 429 1430 4862, … (considered from 0th number)

Below is the program to find Nth catalan number:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the
// nth catalan number
#include <bits/stdc++.h>
using namespace std;
  
// Returns value of Binomial Coefficient C(n, k)
unsigned long int binomialCoeff(unsigned int n,
                                unsigned int k)
{
    unsigned long int res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient based function
// to find nth catalan
// number in O(n) time
unsigned long int catalan(unsigned int n)
{
    // Calculate value of 2nCn
    unsigned long int c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
int main()
{
    int n = 3;
    cout << catalan(n) << endl;
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the
// nth catalan number
class GFG
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static long binomialCoeff(int n,
                          int k)
{
    long res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / 
    // [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) 
    {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient 
// based function to find 
// nth catalan number in 
// O(n) time
static long catalan( int n)
{
    // Calculate value of 2nCn
    long c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
public static void main(String[] args)
{
    int n = 3;
    System.out.println(catalan(n));
}
}
  
// This code is contributed 
// by Arnab Kundu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the
# nth catalan number
  
# Returns value of Binomial
# Coefficient C(n, k)
def binomialCoeff(n, k):
  
    res = 1;
  
    # Since C(n, k) = C(n, n-k)
    if (k > n - k):
        k = n - k;
  
    # Calculate value of
    # [n*(n-1)*---*(n-k+1)] / 
    # [k*(k-1)*---*1]
    for i in range(k):
  
        res *= (n - i);
        res /= (i + 1);
  
    return res;
  
# A Binomial coefficient based 
# function to find nth catalan
# number in O(n) time
def catalan(n):
      
    # Calculate value of 2nCn
    c = binomialCoeff(2 * n, n);
  
    # return 2nCn/(n+1)
    return int(c / (n + 1));
  
# Driver code
n = 3;
print(catalan(n));
  
# This code is contributed 
# by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the
// nth catalan number
using System;
  
class GFG
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static long binomialCoeff(int n,
                          int k)
{
    long res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / 
    // [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) 
    {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient 
// based function to find 
// nth catalan number in 
// O(n) time
static long catalan( int n)
{
    // Calculate value of 2nCn
    long c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
public static void Main()
{
    int n = 3;
    Console.WriteLine(catalan(n));
}
}
  
// This code is contributed 
// by Subhadeep

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find the
// nth catalan number
  
// Returns value of Binomial
// Coefficient C(n, k)
function binomialCoeff($n, $k)
{
    $res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if ($k > $n - $k)
        $k = $n - $k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / 
    // [k*(k-1)*---*1]
    for ($i = 0; $i < $k; ++$i)
    {
        $res *= ($n - $i);
        $res /= ($i + 1);
    }
  
    return $res;
}
  
// A Binomial coefficient based 
// function to find nth catalan
// number in O(n) time
function catalan($n)
{
    // Calculate value of 2nCn
    $c = binomialCoeff(2 * $n, $n);
  
    // return 2nCn/(n+1)
    return $c / ($n + 1);
}
  
// Driver code
$n = 3;
echo catalan($n);
  
// This code is contributed 
// by chandan_jnu.
?>

chevron_right


Output:

5


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.