使用 C++ 查找网格中从一点到另一点的路径数
在本文中,我们得到一个问题,我们需要找到从点 A 到点 B 的总路径数,其中 A 和 B 是固定点,例如,A 是网格中的左上角点,B 是网格中的右下角点。
Input : N = 5 Output : 252 Input : N = 4 Output : 70 Input : N = 3 Output : 20
在给定的问题中,我们可以通过简单的观察来形式化答案并得到结果。
寻找解决方案的方法
在这种方法中,我们根据观察结果为给定问题制定了一个公式,即为了遍历网格从 A 到 B,我们需要向右移动 n 次,向下移动 n 次,这意味着我们需要找到所有这些路径组合的可能性,从而得到 (n+n) 和 n 的组合公式。
示例
#include<bits/stdc++.h> using namespace std; int fact(int n){ // factorial function if(n <= 1) return 1; return n * fact(n-1); } int main() { int n = 5; // given n int answer = 0; // our answer answer = fact(n+n); // finding factorial of 2*n answer = answer / (fact(n) * fact(n)); // (2*n)! / (n! + n!) cout << answer << "\n"; }
输出
252
以上代码的解释
在此代码中,我们计算了 2*n 到 n 的组合公式,因为我们知道要从点 A 移动到点 B,我们将需要精确的 2*n 个操作,两个方向各 n 个操作,因此我们找到所有这些操作的可能组合,即 (2*n)!/ (n! + n!)。给定程序的总体时间复杂度为 O(1),这意味着我们的复杂度不依赖于给定的 n。
结论
在本文中,我们讨论了一个问题,即查找网格中从一点到另一点的路径数。我们还学习了此问题的 C++ 程序以及我们解决的完整方法。我们可以在其他语言(如 C、Java、Python 等)中编写相同的程序。我们希望本文对您有所帮助。
广告