Python利用动态规划解决路径选择问题

简介: Python利用动态规划解决路径选择问题

问题描述

该题是来自力扣的一道题目,题目如下;

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为Finish”)。

问总共有多少条不同的路径?

说明:m n 的值均不超过 100

示例 1:

输入: m = 3, n = 2

输出: 3

解释:

从左上角开始,总共有 3 条路径可以到达右下角。

1. 向右 -> 向右 -> 向下

2. 向右 -> 向下 -> 向右

3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3

输出: 28


解决方案

拿到该题,第一步想到的是利用for循环暴力法来决解,可能会超时,所以考虑到动态规划。

思路如下:

将路径的数目设为:s[a][b],(a,b则分别代表表格中的坐标)因为题目规定只能向下或者向右移动,所以可以得到一个关系式:

s[a][b]=s[a-1][b]+s[a][b-1]

该关系式表示:要到达坐标(a,b)则是由到到(a-1,b)(a,b-1)的所有路径之和:

 

1

 

1

 

1

 

1

 

1

 

1

 

1






 

1





 

S[a][b-1]

 

1




 

S[a-1][b]

 

S[a][b]

即要到达s[a][b]点必先到达S[a][b-1]或者S[a-1][b],所以说到达s[a][b]的路径数目就是S[a][b-1]与S[a-1][b]路径之和;同时因为第一行与第一列的路径仅由该行或该列的路径所达到,所以只有一条路径。

代码解决

s = [[1]*n] + [[1]+[0] * (n-1) for _ in range(m-1)]

#m,n构成的表转化为二维数组。for x in range(1, m):    for y in range(1, n):

#遍历表中的各个元素。        s[x][y] = s[x-1][y] + s[x][y-1]

#满足的关系式print(s[-1][-1])#输出





目录
相关文章
|
2月前
|
Python
动态规划代码(python
动态规划代码(python
21 4
|
4月前
|
Python
Python判断路径末尾是否存在反斜杠
Python判断路径末尾是否存在反斜杠
16 1
|
5月前
|
算法 机器人 Python
动态规划法在扫地机器人中的实战应用(基于动作值函数的策略迭代 python 附源码)
动态规划法在扫地机器人中的实战应用(基于动作值函数的策略迭代 python 附源码)
41 0
|
5月前
|
机器学习/深度学习 算法 Python
动态规划法和策略迭代在扫地机器人中确定状态值和动作值函数的策略评估(python实现 附源码 超详细)
动态规划法和策略迭代在扫地机器人中确定状态值和动作值函数的策略评估(python实现 附源码 超详细)
40 0
|
8天前
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
18 2
|
28天前
|
机器学习/深度学习 数据可视化 索引
lasso路径可视化 python
【4月更文挑战第15天】
|
1月前
|
存储 JSON 数据格式
python读取同路径下的json文件,并解析
使用Python的`json`模块读取和解析JSON文件,首先导入json模块,再用`open()`结合`json.load()`读取文件内容到`data`。通过字典和列表语法访问JSON数据,如`data['name']`获取名字,`data['items']`获取列表,可循环遍历列表元素。
13 0
|
4月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
43 0
力扣 C++|一题多解之动态规划专题(1)
|
4月前
|
Java Go Rust
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
37 0
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
|
4月前
|
Python Java Go
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表
33 0
Python每日一练(20230428) 最长有效括号、矩阵最长递增路径、回文链表