DP问题练习2:网格路径数量计算问题
2017-10-11 20:26
295 查看
DP问题练习2:网格路径数量计算问题
问题描述
有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
样例:
给出 m = 3 和 n = 3, 返回 6.给出 m = 4 和 n = 5, 返回 35.
思路
用坐标i,j标识格子的位置,左上角为(0,0),右下角为(m-1,n-1) 状态转移方程: f(i,j) = i>0?f(i-1,j):0 + j>0?f(i,j-1):0 //f(i,j)表示(i,j)位置的路径数量,i-1和j-1都要在允许的范围里,否则直接取值0
代码:
var M = 3; var N = 3; var LOG = console.log; (()=>{ main() })(); function countPaths(m,n){ return (m==n && m==0) ? 1 : ((m > 0 ? countPaths(m-1,n) : 0) + (n > 0 ? countPaths(m,n-1) : 0)); } function main(){ console.log(countPaths(M-1,N-1)); }
其实三年前我学数据结构这门课的时候做过一道类似的题,不过是求所有可能的路径。当时编码量不到800行,所以屁都不懂,就去网上找了一个解答,使用DFS。由于是第一次写比较复杂的程序,所以有很深的印象。就用dfs写一个解答缅怀一下吧:
/** * 从左上角到右下角可能的路径数量 使用DFS算法 * @param {[type]} m [description] * @param {[type]} n [description] */ function DFS_Pro(m,n){ var count = 0; function dfs(x,y){ if(x == m && y == n){ count ++; }else{ if(x < m) dfs(x+1,y) if(y < n) dfs(x,y+1) } } dfs(0,0); return count; }
相关文章推荐
- DP问题练习1:数字三角最短路径问题
- qscoj 喵哈哈村与哗啦啦村的大战(四)(树形DP求非严格路径数量)
- 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出
- HDU 3790 最短路径问题 (双重权值) dp
- dp中滚动数组的应用:01背包、POJ 1159 Palindrome、多段图路径问题
- 黑马程序员---找出指定文件夹.java文件,列出他们的绝对路径,并计算出数量
- (转)vs2012搜索出问题,只显示搜索的匹配数量不显示具体路径
- 百度地图开发练习(2)百度地图在个别手机显示网格问题
- 上机练习项目二 简单计算问题体验
- 程序设计实习动态规划练习 Charm Bracelet(0/1背包问题dp)
- 蓝桥杯练习/(dp)网格走法数目
- OpenJudge_P7625 三角形最佳路径问题(DP)
- 一:基于spark计算框架下的带容量约束的车辆路径问题并行算法研究
- ZOJ1037 题目大意就是 计算在这个国家中所有城市的旅行售货员问题的最短长度,每个城市位于矩形网格的点上,方向有八个,单位长度为1
- 新年趣事之打牌 记录路径+数量判断的01背包问题
- Java进阶之欧拉工程 第十五篇【网格路径问题】
- 解决关于哈夫曼编码计算带权路径长度问题
- 弱智dp----路径问题
- [无法计算项元数据“%(FullPath)” 无法将项元数据“%(FullPath)”应用于路径] 问题解决办法
- vue-router路径计算问题