原题地址https://www.luogu.org/problemnew/show/P1002

题目描述

棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。

现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入输出格式

输入格式:

一行四个数据,分别表示B点坐标和马的坐标。

输出格式:

一个数据,表示所有的路径条数。

输入输出样例

输入样例 输出样例
6 6 3 3 6
8 7 3 2 102
14 16 4 5 10560723
20 20 10 10 21388094780
20 20 4 0 56477364570

思路

用一个21*21的二维数组来表示棋盘上的每一个点,数组的值代表能到达该点的方法数,-1代表不能到达该点,通过对数组的遍历,到达每一个点的方法等于到达该点上边与到达该店左边的方法数之和。
由于结果可能很大,所以二维数组的类型为long long。

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n,x,y;
long long a[21][21]={0};//因为答案数据可能会很大,所以用long long类型
cin>>n>>m>>x>>y;
/******将马所在的位置点,以及马的控制点取值为-1******/
//-1 代表不可达到的位置
a[x][y] = -1;
if(x - 1 >= 0 && y - 2 >= 0) a[x-1][y-2] = -1;
if(x - 2 >= 0 && y - 1 >= 0) a[x-2][y-1] = -1;
if(x - 2 >= 0 && y + 1 <= m-1) a[x-2][y+1] = -1;
if(x - 1 >= 0 && y + 2 <= m-1) a[x-1][y+2] = -1;
if(x + 1 <= n && y + 2 <= m) a[x+1][y+2] = -1;
if(x + 2 <= n && y + 1 <= m) a[x+2][y+1] = -1;
if(x + 2 <= n && y - 1 >= 0) a[x+2][y-1] = -1;
if(x + 1 <= n && y - 2 >= 0) a[x+1][y-2] = -1;
int i,j;
/******从A点开始遍历******/
for( i=0;i<=n;i++ ){
for( j=0;j<=m;j++ ){
if( a[i][j] == -1 )continue;
if( i==0&&j==0 ){//将A点赋值为1
a[i][j]=1;
continue;
}
//每个点初始化为0,则能到达该点方法数等于其左边与上边的方法数之和
a[i][j] = 0;
if( j-1>=0&&a[i][j-1]!=-1 ){
a[i][j] += a[i][j-1];
}
if( i-1>=0&&a[i-1][j]!=-1 ){
a[i][j] += a[i-1][j];
}
if( a[i][j]==0 )a[i][j]=-1;//如果该点的左边及上边均为-1,则改点为无法到达的点。赋值为-1
}
}
if( a[n][m]==-1 )cout<<"0";
else cout<<a[n][m];
}

最新文章

  1. Mac下maven工程的创建,并搭建SSH环境
  2. java线程学习
  3. C# 6.0 功能预览 (二)
  4. 交换芯片收发包的 DMA 实现原理
  5. head,tail
  6. 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定区域性的资源。请确保在编译时已将“****.****.Resource.resources”正确嵌入或链接到程序集&quot;****&quot;,或者确保所有需要的附属程序集都可加载并已进行了完全签名
  7. BluetoothGatt API
  8. 【WPF】路由事件
  9. poj 3069 Saruman&#39;s Army (贪心)
  10. Linux下查看进程(程序)启动时的环境变量
  11. A basic Windows service in C++ (CppWindowsService)
  12. asp.net验证控件中常用的正则表达式
  13. 使用Webpack加速Vue.js应用的4种方式
  14. 为什么说DOM操作很慢
  15. Data Center手册(2): 安全性
  16. P3954 成绩(noip2017普及组)
  17. 导出不带.svn的文件夹或者是不含.class的文件
  18. css的标准模型和低版本的IE的盒子模型有什么不同?
  19. QT5中无法包含Qtgui头文件的问题。
  20. 05_Kafka Python_Consumer模拟

热门文章

  1. Git-远程仓库【转】
  2. 使用4K显示器遇到的坑
  3. 第7章 调试和错误处理 7.1.1 VS中的调试
  4. 数据库常见的三种join方式
  5. UVa 11021 麻球繁衍
  6. USB.资料
  7. auth权限认证详细讲解
  8. Mac for MySQL 5.7 安装教程
  9. Gitea docker-compose.yaml
  10. 97. Interleaving String *HARD* -- 判断s3是否为s1和s2交叉得到的字符串