Python 用于在N×N网格中查找路由组合数的代码
我必须编写一个代码,计算不同组合的数量,从N×N网格的左上角开始,到右下角结束。但我只能下而右 所以基本上(如果我们给每个顶点一个1-(N+1)^2的数字),从1-(N+1)^2有多少不同的组合。但我只能加1或加N+1 例如:2x2网格:Python 用于在N×N网格中查找路由组合数的代码,python,Python,我必须编写一个代码,计算不同组合的数量,从N×N网格的左上角开始,到右下角结束。但我只能下而右 所以基本上(如果我们给每个顶点一个1-(N+1)^2的数字),从1-(N+1)^2有多少不同的组合。但我只能加1或加N+1 例如:2x2网格: 1 -- 2 -- 3 | | | 4 -- 5 -- 6 | | | 7 -- 8 -- 9 这些组合将是: [1-2-3-6-9] [1-2-5-6-9] [1-2-5-8-9] [1-4-5-6-9] [1-4-5-8-9] [
1 -- 2 -- 3
| | |
4 -- 5 -- 6
| | |
7 -- 8 -- 9
这些组合将是:
[1-2-3-6-9]
[1-2-5-6-9]
[1-2-5-8-9]
[1-4-5-6-9]
[1-4-5-8-9]
[1-4-7-8-9]
现在,我应该如何编写此代码?任何帮助都将不胜感激提前谢谢啊。我看到你在尝试一个EulerProject问题了? 关键是要设法自己解决问题,并在此过程中学习新的东西!你只是在欺骗自己。哦,好吧 不管怎样,考虑一个m行和n列的网格(我们不需要假设网格是正方形)。从左上角开始计数,从零开始,用N_(i,j)表示第i行和第j列中的交点/节点 因此,左上角的节点是N_0(0,0),左下角是N_m(m,0),右下角是N_m(m,N)。显然,从N_(0,0)到网格最右侧或最顶部的任何节点的路径数只有1(因为我们只能向下或向右进行)
现在,考虑n1(1,1)有多少个路径。我们必须首先通过N_u0(0,1)或N_0(1,0)旅行。这只产生两条到N_(1,1)的路径。我们可以继续这一进程。为了确定到任何节点N_(i,j)的路径总数,我们只需要将到N_(i,j)的路径总数相加−1) 和N_(i)−1,j)。下图以图形方式理解了该过程,其中每个新整数表示到节点的路径数
如果我们用python编写此代码,我们会得到:def route_num(cube_size):
L = [1] * cube_size
for i in range(cube_size):
for j in range(i):
L[j] = L[j]+L[j-1]
L[i] = 2 * L[i - 1]
return L[cube_size - 1]
打印路径_num(20)将为我们提供137846528820
资料来源:研究“动态规划”,尝试用它来解决问题,然后在遇到问题时再回来。作为记录,这也有一个答案:组合动态规划不是解决这个问题的最快方法。有一种更快的方法是使用一些组合数学。从一组
n
中选择k
项的方法数为n/(k!(n-k)!
,其中
是阶乘函数。(Python中没有内置的阶乘,但很容易编写代码。)您能想出一种方法将您的问题转化为从一组选项中选择一定数量的项的问题吗?如果您不在底部或右侧,你可以做2个choices@user2357112动态编程有助于强制执行以下内容:PI不理解您所说的任何内容!哈哈,但是谢谢你,代码成功了!