题目:给定一个矩阵表示网格地图,矩阵元素表示行驶代价,行驶方向只有向右和向下,给定起点和终点,求出二者之间的最短路径和最短路径的长。
思路:动态规划
- dp数组:从起点(0,0)到点(i,j)的最短路径长。
- 递推公式:行驶方向只有向右和向下,所以可以到达(i,j)的邻点只有(i-1,j),(i,j-1)。可得dp[i][j] = min(dp[i-1][j]+map[i][j], dp[i][j-1]+map[i][j])
- 初始化:dp第0行和第0列的行驶值依次在前面的值(dp[0][j-1]或者dp[i-1][0])+1
- 遍历方式:决定dp[i][j]的值的元素在它的左边和上面,因此顺序遍历即可
- 另外,使用一个全局参数route记录对应的路径
def find(matrix):
dp = [[1e9]*len(matrix[0]) for _ in range(len(matrix))]
dp[0][0] = matrix[0][0]
route = {
(0,0):[matrix[0