使用 C++ 查找网格中从一个点到另一个点的路径数

c++server side programmingprogramming

在本文中,我们给出一个问题,我们需要找到从点 A 到 B 的总路径数,其中 A 和 B 是固定点,即 A 是网格中的左上点,B 是网格中的右下点,例如 −

输入:N = 5
输出:252

输入:N = 4
输出:70

输入:N = 3
输出:20

在给定的问题中,我们可以通过简单的观察将答案形式化并得到结果。

寻找解决方案的方法

在这种方法中,我们通过观察为给定的问题制定一个公式,即从 A 到 B 穿过网格,我们需要向右行进 n 次,向下行进 n 次,这意味着我们需要找到这些路径的所有组合可能性,这样我们就得到了 (n+n) 和 n 的组合公式。

示例

#include<bits/stdc++.h>

using namespace std;
int fact(int n){ // 阶乘函数
   if(n <= 1)
      return 1;
   return n * fact(n-1);
}
int main() {
   int n = 5; // 给定 n
   int answer = 0; // 我们的答案
   answer = fact(n+n); // 寻找 2*n 的阶乘
   answer = answer / (fact(n) * fact(n)); // (2*n)! / (n! + n!)
   cout << answer << "\n";
}

输出

252

上述代码的解释

在此代码中,我们计算 2*n 到 n 的组合公式,因为我们知道从点 A 到 B 的旅行,我们将需要在两个方向上进行 2*n 次操作,即在一个方向上进行 n 次操作,在另一个方向上进行 n 次操作,因此我们找到了这些操作的所有可能组合,即 (2*n)!/ (n! + n!)。给定程序的总体时间复杂度为 O(1),这意味着我们的复杂度与给定的 n 无关。

结论

在本文中,我们讨论了一个问题,即在网格中找到从一个点到另一个点的路径数。我们还学习了这个问题的 C++ 程序和我们解决的完整方法。我们可以用其他语言(例如 C、java、python 和其他语言)编写相同的程序。我们希望您觉得这篇文章有用。


相关文章