过河卒

题目描述

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

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1
6 6 3 3
输出 #1
6

说明/提示

结果可能很大!

【解题思路】

经典老题,看代码

 1 #include <iostream>  
 2 using namespace std;  
 3 long long x1,y1,x2,y2,p[22][22];  
 4 int pan(long long x1,long long y1, long long x2, long long y2)  
 5 {  
 6 p[x2][y2]=-1;  
 7 if (x2+2<=x1&&y2+1<=y1) p[x2+2][y2+1]=-1;      
 8 if (x2+2<=x1&&y2-1>=1) p[x2+2][y2-1]=-1;      
 9 if (x2+1<=x1&&y2+2<=y1) p[x2+1][y2+2]=-1;      
10 if (x2+1<=x1&&y2-2>=1) p[x2+1][y2-2]=-1;      
11 if (x2-1>=1&&y2+2<=y1) p[x2-1][y2+2]=-1;      
12 if (x2-1>=1&&y2-2>=1) p[x2-1][y2-2]=-1;      
13 if (x2-2>=1&&y2+1<=y1) p[x2-2][y2+1]=-1;      
14 if (x2-2>=1&&y2-1>=1) p[x2-2][y2-1]=-1;      
15 return 0;  
16 }  
17 int main()  
18 {  
19  cin >>x1>>y1>>x2>>y2;  
20 x2++; y2++; x1++; y1++;  
21 p[1][0]=1;  
22 pan(x1,y1,x2,y2);  
23 
24 for (long long o1=1;o1<=x1;o1++)  
25 for (long long o2=1;o2<=y1;o2++)  
26 {if (p[o1][o2]==-1)p[o1][o2]++; else p[o1][o2]=p[o1-1][o2]+p[o1][o2-1];}  
27 cout <<p[x1][y1];  
28 return 0;  
29 }  

 

posted @ 2019-07-25 21:43  GTR_PaulFrank  阅读(376)  评论(1编辑  收藏  举报