题目![](https://i-blog.csdnimg.cn/blog_migrate/6bc604637ae3279fd44f5ba36f83ab75.png)
从2×2格子的左上角开始移动,只能向右或者向下移动,到达右下角共有6条路径。
在20×20的格子中,有多少条这样的路径?
思路
我们利用2×2的格子中的3×3个顶点来计算到达每个顶点有多少条路径,我们初始化一个数组3×3的数组x,其中每个值为0,之后会对其进行更新。
对于最上边一行和最左边一行的顶点来说,从起点开始向右或向下到达这些顶点的路径只有一条,所以我们将x[0][0],x[0][1],x[0][2],x[1][0]和x[2][0]都更新为1。
到达第二行的第二个顶点的路径数=(到达第二行第一个顶点的路径数+到达第一行第二个顶点的路径数),因为只有第二行第一个顶点和第一行第二个顶点可以通过向右或者向下到达该点,故到达每个顶点的路径数都由到它左边顶点的路径数和到它上边顶点的路径数相加得到。
对于20×20的格子,用这样的解题思路就可以得到结果。
代码实现(python)
def routes(n):
x = [[0 for i in range(n + 1)] for j in range(n + 1)]
for i in range(n + 1):
x[0][i] = 1
x[i][0] = 1
for i in range(1, n + 1, 1):
for j in range(1, n + 1, 1):
x[i][j] = x[i - 1][j] + x[i][j - 1]
return x[n][n]
if __name__ == '__main__':
print(routes(20))