机器人从(0,0)到(x,y)有多少种走法

public 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(!success && y>=1 && isFree(x,y-1))//试着向上

{

success=getPath(x,y-1,path);//可行,向上走

}

if(!success)

{

path.add(p);//错了,最好不要再走这里

}

return success;

}

public boolean getPath(int x,int y,ArrayList<Point> path,Hashtable<Point,Boolean> cache)

{

Point p=new Point(x,y);

if(cache.containsKey(p))//已访问过这个点

{

return cache.get(p);

}

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,cache);//可行,向左走

}

if(!success && y>=1 && isFree(x,y-1))//试着向上

{

success=getPath(x,y-1,path,cache);//可行!向上走

}

if(!success)

{

path.add(p);//错了~,最好不要再走这里

}

cache.put(p,success);//缓存结果

return success;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 12:41:49

机器人从(0,0)到(x,y)有多少种走法的相关文章

面试算法题:爬楼梯,N级楼梯有多少种走法?

By Long Luo 个人博客链接 最近去面试时,在一家小公司面试时,公司小BOSS给我出了一道算法题: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. 这个问题应该是一个很老的题目了,用中学数学来说,就是一个排列组合问题.当时拿到这个题目之后,首先想到使用递归的思想去解决这个问题: N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2

(hdu step 3.1.1)超级楼梯(简单递推:从第1级到第m级有多少种走法,每次只能走一步或两步)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 652 Accepted Submission(s): 483   Problem Description

有128个台阶,每次可走一步或者两步,请问有多少种走法?

开始,我思考成排列组合问题,发现算阶乘时数太大,计算机根本不能正确计算,所以必定有别的方法. 解决办法:把问题拆分,如下: 台阶数为 方案 方案种数 1 1 1 2 1-1,2   2 3 1-1-1,1-2,2-1   3 4 1-1-1-1,1-1-2,1-2-1,2-1-1,2-2 5 ... ..... ... n=(n-1)+(n-2) 就是斐波那契数列,那就好算了. 由此题引出动态规划算法.相关思想就是:动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段)

[ACM] HDU 3398 String (从坐标0,0走到m,n且不能与y=x-1相交的方法数,整数唯一分解定理)

String Problem Description Recently, lxhgww received a task : to generate strings contain '0's and '1's only, in which '0' appears exactly m times, '1' appears exactly n times. Also, any prefix string of it must satisfy the situation that the number

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37), 因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

package edu.bjtu.day8_27; import java.util.Scanner; /** * @author Allen * @version 创建时间:2017年8月27日 下午7:55:46 * 类说明:链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但

plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral)出错

ValueError: c of shape (1, 400) not acceptable as a color sequence for x with size 400, y with size 400 # Visualize the data: plt.scatter(X[0, :], X[1, :], c=Y.reshape(400), s=40, cmap=plt.cm.Spectral); Y改成Y.reshape(400) 原文地址:https://www.cnblogs.com/

剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38), 因为3+5+3+8=19。请问该机器人能够到达多少个格子?

/*地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子. 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18.但它不能进入方格(35, 38), 因为3+5+3+8=19.请问该机器人能够到达多少个格子?*/public class Class12 { public int moveCount(int rows, int cols, int threshold){

画线代码V1.0.0

画线代码: 最终效果图: 优点: 1.效果还行,计算量也不大(就一点2维直线一般式能有多少运算量). 缺点: 1.每条线怎么也是建模,可能会有点开销. 2.编辑起来很是麻烦. 代码部分: /*************************************** Editor: Tason Version: v1.0 Last Edit Date: 2018-XX-XX Tel: [email protected] Function Doc: 1.自建Mesh划线 ************

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro