Java (过河卒)
【问题描述】
棋盘上A点有一个过河卒,需要走到目标Bdian。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A点(0,0),B(n,m),同样马的位置坐标是需要给出的。
先上完整代码
public static void main(String[] args){int MAXN = 20+2;int MAXM = 20+2;boolean [][]vis = new boolean [MAXN][MAXM];//全局变量会被初始化为零,false表示可以走long [][]ans = new long [MAXN][MAXM];//用ans数组存储到每一个点共有多少条路径Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt(); //n,m表示棋盘的大小int x = scanner.nextInt();int y = scanner.nextInt(); //x,y表示马的位置//处理马能控制的坐标vis[x][y] = true; //true表示不能走int [][]moves = new int[][]{{1,-2},{2,-1},{1,2},{2,1},{-1,2},{-2,1},{-1,-2},{-2,-1}}; //此数组存放八个坐标,静止的马走一步可达到的所有点,下,x,y表示加或减for(int i=0;i<8;i++){int nx = x+moves[i][0];int ny = y+moves[i][1];if(nx>=0 && nx<=n && ny>=0 && ny<=m;){vis[nx][ny]=true; //以上将所有不能走的点处理完毕}}for(int i=0;i<=n;i++){for(int j=0;j<=m;j++){if(vis[i][j] == true)ans[i][j] = 0;else if(i == 0 || j == 0)ans[i][j]=1;elseans[i][j] = ans[i]j-1] + ans[i-1][j];}}System.out.println(ans[n][m]);
}
【算法过程】
当我知道这题的定位的时候,我也清晰的认识到自己的水平,这是一道非常基础的动态规划题,题目难度一颗星,但是我确实是想了一天才知道怎么做,我写的过程添加了备注,应该更好的理解了。
有非常重要的一点,首先你要知道马是怎么走的,我当时看见马的控制点也是有点蒙的,去网上找,发现大家的回答都是 不是吧不是吧竟然有人连马走日字都不知道,这看了也没明白,其实很简单,马完整的跳一步是一脚直的,一脚斜着,具体如图所示
图中1 2 3 4 5 6 7 8表示了在P点静止的马控制的点,知道这个这个题就简单多了。
了解在坐标系中每个点到他的路线有几条,用二维数组很好解决
Java (过河卒)相关推荐
- Java 洛谷 P1002 过河卒讲解
题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为" ...
- (Java实现) 过河卒
过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为&q ...
- 过河卒问题(java实现)
过河卒问题(java实现) 题目描述 输入格式 一行四个正整数,分别表示B点坐标和马的坐标 输出格式 表示所有路径条数的一个整数 输入输出样例 输入:6 6 3 3 输出:6 注:对于100%的数据, ...
- Luogu P1002 过河卒(DP)
P1002 过河卒 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之 ...
- 过河卒(Noip2002)
[题目描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1 ...
- 经典动态规划之过河卒【洛谷 P1002】
传送门 因为小兵只能往右走和往下走 所以动态转移方程为map[i][j]=map[i-1][j]+map[i][j-1] 感觉上..是很经典的. 题目描述 棋盘上AAA点有一个过河卒,需要走到目标BB ...
- 马拦过河卒(NOIP2002)
马拦过河卒(NOIP2002) (2010-05-14 15:57:22) 标签: 递归 杂谈 分类: 递归与回溯 Description : 如图,A点有一个过河卒,需要走到目标B点.卒行走的规则: ...
- SDUT 1265-马停下过河卒(DFS)
马拦过河卒 Time Limit: 3000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 棋盘上A点有一个过河卒,须要走到目标B点.卒行走的规则:可以向下. ...
- Codevs 1010 过河卒 2002年NOIP全国联赛普及组
1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...
最新文章
- 【整理】Linux驱动中,probe函数何时被调用
- 演练:使用 TableLayoutPanel 在 Windows 窗体上排列控件
- 20155334 2016-2017-2 《Java程序设计》第四周学习总结
- go语言csv包_玩转数据处理120题R语言版本
- 数据库连接池的工作原理
- Spring mvc介绍
- qt输出中文乱码处理(解决方法)
- [BZOJ1030][JSOI2007]文本生成器
- 杂项:JFB-权限设置
- android jni socket
- 某些面向对象的思想--一步步更新
- 批处理命令调用WINRAR对文件进行压缩
- Raki的读paper小记:TriggerNER: Learning with Entity Triggers as Explanations for Named Entity Recognition
- 032-IDUtils 工具类模板
- 表白神器(VBS编程)
- android singleInstance 和 singleTask 的区别
- 老司机带你检测相似图片
- 【git提交报错】git commit 提交的时候报错husky > pre-commit (node v16.15.0) No staged files match any of provided
- 如何将eslipse的背景色变为暗黑色
- (3) openssl genrsa(生成rsa私钥)