📜  德拉诺数

📅  最后修改于: 2021-09-22 10:34:14             🧑  作者: Mango

在数学中,Delannoy 数D描述了从矩形网格的西南角 (0, 0) 到东北角 (m, n) 的路径数,仅使用向北、东北或向东的一步。
例如,D(3, 3) 等于 63。
德兰诺数可以通过以下方式计算:

Delannoy 数可用于查找:

  • 计算长度为 m 和 n 的两个序列的全局比对数。
  • m 维整数点阵中距原点最多 n 步的点数。
  • 在元胞自动机中,半径为 n 的 m 维冯诺依曼邻域中的元胞数。
  • 半径为 n 的 m 维冯诺依曼邻域表面上的单元数。

例子 :

Input : n = 3, m = 3
Output : 63

Input : n = 4, m = 5
Output : 681

下面是查找 Delannoy Number 的实现:

C++
// CPP Program of finding nth Delannoy Number.
#include 
using namespace std;
 
// Return the nth Delannoy Number.
int dealnnoy(int n, int m)
{
    // Base case
    if (m == 0 || n == 0)
        return 1;
 
    // Recursive step.
    return dealnnoy(m - 1, n) +
           dealnnoy(m - 1, n - 1) +
           dealnnoy(m, n - 1);
}
 
// Driven Program
int main()
{
    int n = 3, m = 4;
    cout << dealnnoy(n, m) << endl;
    return 0;
}


Java
// Java Program for finding nth Delannoy Number.
import java.util.*;
import java.lang.*;
 
public class GfG{
     
    // Return the nth Delannoy Number.
    public static int dealnnoy(int n, int m)
    {
        // Base case
        if (m == 0 || n == 0)
            return 1;
 
        // Recursive step.
        return dealnnoy(m - 1, n) +
            dealnnoy(m - 1, n - 1) +
            dealnnoy(m, n - 1);
    }
     
    // driver function
    public static void main(String args[]){
        int n = 3, m = 4;
        System.out.println(dealnnoy(n, m));
    }
}
 
/* This code is contributed by Sagar Shukla. */


Python3
# Python3 Program for finding
# nth Delannoy Number.
 
# Return the nth Delannoy Number.
def dealnnoy(n, m):
     
    # Base case
    if (m == 0 or n == 0) :
        return 1
 
    # Recursive step.
    return dealnnoy(m - 1, n) + dealnnoy(m - 1, n - 1) + dealnnoy(m, n - 1)
 
# Driven code
n = 3
m = 4;
print( dealnnoy(n, m) )
 
# This code is contributed by "rishabh_jain".


C#
// C# Program for finding nth Delannoy Number.
using System;
 
public class GfG {
 
    // Return the nth Delannoy Number.
    public static int dealnnoy(int n, int m)
    {
 
        // Base case
        if (m == 0 || n == 0)
            return 1;
 
        // Recursive step.
        return dealnnoy(m - 1, n) +
               dealnnoy(m - 1, n - 1) +
                     dealnnoy(m, n - 1);
    }
 
    // driver function
    public static void Main()
    {
        int n = 3, m = 4;
        Console.WriteLine(dealnnoy(n, m));
    }
}
 
/* This code is contributed by vt_m. */


PHP


Javascript


C++
// CPP Program of finding nth Delannoy Number.
#include 
using namespace std;
 
// Return the nth Delannoy Number.
int dealnnoy(int n, int m)
{
    int dp[m + 1][n + 1];
 
    // Base cases
    for (int i = 0; i <= m; i++)
        dp[i][0] = 1;
    for (int i = 0; i <= m; i++)
        dp[0][i] = 1;   
 
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++)
            dp[i][j] = dp[i - 1][j] +
                       dp[i - 1][j - 1] +
                       dp[i][j - 1];
 
    return dp[m][n];
}
 
// Driven Program
int main()
{
    int n = 3, m = 4;
    cout << dealnnoy(n, m) << endl;
    return 0;
}


Java
// Java Program of finding nth Delannoy Number.
 
import java.io.*;
 
class GFG {
     
    // Return the nth Delannoy Number.
    static int dealnnoy(int n, int m)
    {
        int dp[][]=new int[m + 1][n + 1];
      
        // Base cases
        for (int i = 0; i <= m; i++)
            dp[i][0] = 1;
        for (int i = 0; i < m; i++)
            dp[0][i] = 1;   
      
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                dp[i][j] = dp[i - 1][j] +
                           dp[i - 1][j - 1] +
                           dp[i][j - 1];
      
        return dp[m][n];
    }
      
    // Driven Program
    public static void main(String args[])
    {
        int n = 3, m = 4;
        System.out.println(dealnnoy(n, m));
         
    }
}
 
// This code is contributed by Nikita Tiwari.


Python3
# Python3 Program for finding nth
# Delannoy Number.
 
# Return the nth Delannoy Number.
def dealnnoy (n, m):
    dp = [[0 for x in range(n+1)] for x in range(m+1)]
 
    # Base cases
    for i in range(m):
        dp[0][i] = 1
     
    for i in range(1, m + 1):
        dp[i][0] = 1
 
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] + dp[i][j - 1];
 
    return dp[m][n]
 
# Driven code
n = 3
m = 4
print(dealnnoy(n, m))
 
# This code is contributed by "rishabh_jain".


C#
// C# Program of finding nth Delannoy Number.
using System;
 
class GFG {
 
    // Return the nth Delannoy Number.
    static int dealnnoy(int n, int m)
    {
         
        int[, ] dp = new int[m + 1, n + 1];
 
        // Base cases
        for (int i = 0; i <= m; i++)
            dp[i, 0] = 1;
        for (int i = 0; i < m; i++)
            dp[0, i] = 1;
 
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                dp[i, j] = dp[i - 1, j]
                     + dp[i - 1, j - 1]
                         + dp[i, j - 1];
 
        return dp[m, n];
    }
 
    // Driven Program
    public static void Main()
    {
        int n = 3, m = 4;
         
        Console.WriteLine(dealnnoy(n, m));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


输出:

129

下面是寻找第 n 个德兰诺伊数的动态规划程序:

C++

// CPP Program of finding nth Delannoy Number.
#include 
using namespace std;
 
// Return the nth Delannoy Number.
int dealnnoy(int n, int m)
{
    int dp[m + 1][n + 1];
 
    // Base cases
    for (int i = 0; i <= m; i++)
        dp[i][0] = 1;
    for (int i = 0; i <= m; i++)
        dp[0][i] = 1;   
 
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++)
            dp[i][j] = dp[i - 1][j] +
                       dp[i - 1][j - 1] +
                       dp[i][j - 1];
 
    return dp[m][n];
}
 
// Driven Program
int main()
{
    int n = 3, m = 4;
    cout << dealnnoy(n, m) << endl;
    return 0;
}

Java

// Java Program of finding nth Delannoy Number.
 
import java.io.*;
 
class GFG {
     
    // Return the nth Delannoy Number.
    static int dealnnoy(int n, int m)
    {
        int dp[][]=new int[m + 1][n + 1];
      
        // Base cases
        for (int i = 0; i <= m; i++)
            dp[i][0] = 1;
        for (int i = 0; i < m; i++)
            dp[0][i] = 1;   
      
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                dp[i][j] = dp[i - 1][j] +
                           dp[i - 1][j - 1] +
                           dp[i][j - 1];
      
        return dp[m][n];
    }
      
    // Driven Program
    public static void main(String args[])
    {
        int n = 3, m = 4;
        System.out.println(dealnnoy(n, m));
         
    }
}
 
// This code is contributed by Nikita Tiwari.

蟒蛇3

# Python3 Program for finding nth
# Delannoy Number.
 
# Return the nth Delannoy Number.
def dealnnoy (n, m):
    dp = [[0 for x in range(n+1)] for x in range(m+1)]
 
    # Base cases
    for i in range(m):
        dp[0][i] = 1
     
    for i in range(1, m + 1):
        dp[i][0] = 1
 
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] + dp[i][j - 1];
 
    return dp[m][n]
 
# Driven code
n = 3
m = 4
print(dealnnoy(n, m))
 
# This code is contributed by "rishabh_jain".

C#

// C# Program of finding nth Delannoy Number.
using System;
 
class GFG {
 
    // Return the nth Delannoy Number.
    static int dealnnoy(int n, int m)
    {
         
        int[, ] dp = new int[m + 1, n + 1];
 
        // Base cases
        for (int i = 0; i <= m; i++)
            dp[i, 0] = 1;
        for (int i = 0; i < m; i++)
            dp[0, i] = 1;
 
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                dp[i, j] = dp[i - 1, j]
                     + dp[i - 1, j - 1]
                         + dp[i, j - 1];
 
        return dp[m, n];
    }
 
    // Driven Program
    public static void Main()
    {
        int n = 3, m = 4;
         
        Console.WriteLine(dealnnoy(n, m));
    }
}
 
// This code is contributed by vt_m.

PHP


Javascript


输出 :

129