Lattice problems

1. paths-problem 15 in Project Euler-Python实现

问题描述:起点为左上角,终点为右下角,行进方向只能是向右或者向下,那么对于一个20 x 20网格,从起点到终点一共有多少条路径。

问题分析:该问题可通过二维数组进行分析。20 x 20网格中,共有 21 x 21网格点。以终点为二维数组第一个元素,建立二维数组。对任意一个网格点,其到终点的路径数为下方网格点路径数加上右方网格点路径数。即

Routes[i][j] = Routes[i][j-1] + Routes[i-1][j]

python程序:

 1 # coding = utf8
 2 
 3 # 边界
 4 bottom = [0, 1, 1, 1, 1,
 5           1, 1, 1, 1, 1,
 6           1, 1, 1, 1, 1,
 7           1, 1, 1, 1, 1, 1]
 8 right = [0, 1, 1, 1, 1,
 9          1, 1, 1, 1, 1,
10          1, 1, 1, 1, 1,
11          1, 1, 1, 1, 1, 1]
12 
13 # 初始化数组 n*n grid 对应的数组大小为(n+1)*(n+1)(网格点)
14 routes = [[0] * 21 for i in range(21)]
15 
16 # 初始化数组边界
17 for i in range(21):
18     routes[0][i] = bottom[i]
19 for i in range(21):
20     routes[i][0] = right[i]
21 
22 # 路径数通过相邻两节点路径数相加得到
23 for i in range(1, 21):
24     for j in range(1, 21):
25         routes[i][j] = routes[i][j-1] + routes[i-1][j]
26 print(routes[20][20])

 

posted @ 2020-03-01 20:37  浪月云海  阅读(295)  评论(0)    收藏  举报