博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
过河卒
阅读量:5350 次
发布时间:2019-06-15

本文共 1278 字,大约阅读时间需要 4 分钟。

【题目描述】

如图,A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图C点上的马可以控制9个点(图中的P1,P2···P8和C)。卒不能通过对方马的控制点。

棋盘用坐标表示,A 点(0,0)、B 点(n,m)(n,m 为不超过 20 的整数,并由键盘输入),同样马的位置坐标是需要给出的(约定C不等于A,同时C不等于B)。现在要求你计算出卒从A点能够到达B点的路径的条数(1 <= n,m <= 20)。

【输入描述】

B点的坐标(n,m)以及对方马的坐标(X,Y)。

【输出描述】

一个整数(路径的条数)。

【样例输入】

6 6 3 2

【样例输出】

17

源代码:#include
int m,n,x,y;long long i[21][21]={
0};bool f[21][21]={
0};int main() //麻烦。{ scanf("%d%d%d%d",&n,&m,&x,&y); if (x-2>=0&&y-1>=0) f[x-2][y-1]=true; if (x-2>=0&&y+1<=m) f[x-2][y+1]=true; if (x+2<=n&&y-1>=0) f[x+2][y-1]=true; if (x+2<=n&&y+1<=m) f[x+2][y+1]=true; if (x-1>=0&&y-2>=0) f[x-1][y-2]=true; if (x+1<=n&&y-2>=0) f[x+1][y-2]=true; if (x-1>=0&&y+2<=m) f[x-1][y+2]=true; if (x+1<=n&&y+2<=m) f[x+1][y+2]=true; f[x][y]=true; int t=m>n?m:n; i[0][0]=1; for (int a=1;a<=t;a++) //赋值须严谨。 { if (!f[a][0]) i[a][0]=i[a-1][0]; if (!f[0][a]) i[0][a]=i[0][a-1]; } for (int a=1;a<=n;a++) for (int b=1;b<=m;b++) if (!f[a][b]) i[a][b]=i[a-1][b]+i[a][b-1]; printf("%lld",i[n][m]); //2数可能很大。 return 0;}

转载于:https://www.cnblogs.com/Ackermann/p/5608006.html

你可能感兴趣的文章
随便写写2014创业记(二)
查看>>
Gray box testing definition
查看>>
SPOJ130_Rent your airplane and make money_单调队列DP实现
查看>>
ArcMap将shp文件批量逐个导出
查看>>
Java学习--设计模式简介
查看>>
PL/SQL 连接mysql步骤
查看>>
VIM HML
查看>>
socket了解(转)
查看>>
eclipse 技巧
查看>>
JS实现固定在网页右上角3D风格旋转文字
查看>>
crontab
查看>>
如何设置ASP.NET站点页面运行超时
查看>>
TOJ 3151: H1N1's Problem(欧拉降幂)
查看>>
JavaScript sort()方法比较器
查看>>
crawler_大型舆情架构图
查看>>
JDK及JRE简介
查看>>
this关键字剖析
查看>>
【网站收藏】
查看>>
Spring中@相关注解的意义
查看>>
redis事务
查看>>