9.9递归和动态规划(二)——有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
来源:互联网 发布:h3c 5500 端口聚合 编辑:程序博客网 时间:2024/06/05 15:05
/**
* 功能:有个机器人坐在X*Y网格的左上角,只能向右、向下移动。机器人从(0,0)到(X,Y)有多少种走法。
* 进阶:假设有些点为“禁区”,机器人不能踏足。找出一条路径,让机器人从左上角移动到右下角。
* 功能:有个机器人坐在X*Y网格的左上角,只能向右、向下移动。机器人从(0,0)到(X,Y)有多少种走法。
* 进阶:假设有些点为“禁区”,机器人不能踏足。找出一条路径,让机器人从左上角移动到右下角。
*/
解答:
排列组合问题:共有(X+Y)!/X!Y!
进阶问题有两种方法:
方法一:
//递归法/** * 思路:自上而下 * 从终点往回走,试着找出到其相邻点的路径。 * @param x * @param y * @param path * @return */public static boolean getPath(int x,int y,ArrayList<Point> path){Point p=new Point(x,y);path.add(p);if(x==0&&y==0)return true;//找到路径boolean success=false;if(x>=1&&isFree(x-1,y))//向左走success=getPath(x-1,y, path);if(y>=1&&isFree(x,y-1))success=getPath(x,y-1,path);if(!success)path.add(p);//错误路径 return success;}
方法二:
<span style="white-space:pre"></span>//动态规划/** * 思路:缓存先前访问过的点 * @param x * @param y * @param path * @param cache * @return */public static boolean getPathDP(int x,int y,ArrayList<Point> path,HashMap<Point,Boolean> cache){Point p=new Point(x,y);if(x==0&y==0)return true;path.add(p);if(cache.containsKey(p))return cache.get(p);boolean success=false;if(x>=1&&isFree(x-1,y))success=getPathDP(x-1, y, path, cache);if(y>=1&&isFree(x,y-1))success=getPathDP(x, y-1, path, cache);if(!success)path.add(p);//错误路径的点cache.put(p, success);//缓存结果return success;}}class Point{int x;int y;boolean isFree;public Point(){}public Point(int x,int y){this.x=x;this.y=y;}}
0 1
- 9.9递归和动态规划(二)——有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印一条路径(
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印一条路径(优化)
- 机器人从(0,0)到(x,y)有多少种走法
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印所有可能的路径
- 机器人位于m x n网格的左上角(在下图中标记为“开始”) 机器人只能随时向下或向右移动。
- 经典问题:对于一个m*n的网格,从左上角的方格到右下角的方格,共有多少条路径(只允许向右和向下)
- 网格从左下角移动到右上角有多少种路线(动态规划)
- 现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子
- 证明:(0,0)到(x,y)连线上横纵坐标都是正整数的点有gcd(x,y)个
- Project Euler15 给定一个20*20的方格,从左上角到右下角的路径有多少条?(只允许向右和向下走)
- 给你5个数a,b,c,d,k。x属于[a,b]y属于[c,d]。 问你有多少对(x,y)的公约数为k
- 求直线ax+by+c=0 上有多少个整点(x,y)满足x∈[-100,100],y∈[-100,100]
- 若有x = 1,y = 2, z = 3,则表达式(x<y?x:y)==z++的值?
- 动态规划:机器人走n米有多少种走法问题
- (x&y)+((x^y)>>1)用法
- java递归巧用(递归计算从x到y的和)
- 【一道数学题】从(0,0)点经过(x,y)点到达(a,b)点的最短路径有多少条
- Java出现No enclosing instance of type ImageViewer is accessible. Must qualify the allocation with an
- 1691: CZY追女孩
- 第十三章创建与维护表
- 使用StoryBoard做IOS UI界面跳转
- [iOS-Swift编程]Method '...' with Objective-C selector '...' 错误的解决方法
- 9.9递归和动态规划(二)——有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
- IOS-Frameworks-UIKit-NSLayoutConstraint 自动布局注意事项
- Django分页的基本实现办法
- Android基础知识杂记
- SSH框架总结
- HDU-OJ-1029 Ignatius and the Princess IV-出现至少(N+1)/2次的数
- scala学习:Scala文件的读取、写入、控制台输入操作代码
- uva 11836(两个四面体最短距离)
- 简单的HTML5在线画板