[计蒜客(蓝桥杯省赛)]马踏过河卒

题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)

算法标签 冒泡排序

题目

[计蒜客(蓝桥杯省赛)]马踏过河卒_第1张图片

提示

[计蒜客(蓝桥杯省赛)]马踏过河卒_第2张图片

思路

先标记马的预备位与自身位置不可走。
卒子当前的路径数=[i-1][j]的路径数+[i][j-1]的路径数

题目代码

#include

using namespace std;

const int N=30;
typedef long long LL;

LL map[N][N];
bool st[N][N];

int dir[8][2]={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};//马的偏移量
int main()
{
  int n,m,cx,cy;
  cin>>n>>m>>cx>>cy;
  
  st[cx][cy]=true;//马起点
  for(int i=0;i<8;i++)st[cx+dir[i][0]][cy+dir[i][1]]=true;//马可到的位置
  
  
  map[0][0]=1;//出发点 预填为1
  for(int i=0;i<=n;i++)
    for(int j=0;j<=m;j++)
      if(i||j)if(!st[i][j])map[i][j]=map[i-1][j]+map[i][j-1];//不过边界 不过马
  
  cout<<map[n][m];
}

你可能感兴趣的:(计蒜客)