一道递归的基础题。
题目描述:
棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A 点 (0, 0)、B 点 (n, m),同样马的位置坐标是需要给出的。
现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入:一行四个正整数,分别表示 B 点坐标和马的坐标。
输出:一个整数,表示所有的路径条数。
对于 100 %的数据,1≤m,n≤20 1≤马的坐标≤20
读完题,发现两个问题:
1.在20*20的格子上用递推,数据特大,定义二维数组时要注意用long long 。
2.本题 A 点坐标是(0,0) 计算时容易出界,所以要把横竖坐标都+1。
思路:应该由三个函数组成
1.主函数
2.递推函数
3.判定是否有马的函数
我们先假设马不存在,只是一个进阶版的数楼梯(二维),试一试。
主函数:
#include<bits/stdc++.h>
using namespace std;
long long int i,j,a,b;
long long int c[1005][1005];
int main()
{
int m,n;
memset(c,0,sizeof(c));
cin>>m>>n>>a>>b;
c[1][1]=1;//从(1,1)开始定义,最左一列和最上一排保持为0
for(i=1;i<=m+1;i++)
{
for(j=1;j<=n+1;j++)
{
ditui();
}
}
cout<<c[m+1][n+1];
接下来是递推函数