过河卒问题

问题描述:在棋盘上A点位置(0,0)有一个过河卒,需要到达B点(N,M),在C点位置有一个马阻拦卒,所以卒不能路过C点以及马能一步到达的位置。卒只进行向下和向右操作,棋盘坐标与数学里第四象限不同,现假设棋盘下方坐标都为正。求到达B点路线数量。

   解析:设A点到棋盘中某一点(i,j)的路线数量为a(i,j).而能一步到达(i,j)的点只有两个,分别是上面点(i-1,j),左边点(i,j-1),那么要到(i,j)要么是先到上面点(i-1,j)然后走一步到达(i,j),要么先到左边点(i,j-1)再走一步到达(i,j),所以到达(i,j)的路线数量就会是到达上面点(i-1,j)和到达左边点(i,j-1)这两个的路线之和。那么我们可以得到一个关系式,

                          a(i,j)=a(i-1,j)+a(i,j-1);

同时注意不能路过马所在位置以及马一步到达的位置。那么这些位置的路线数量就是0。这些位置有什么特点呢,马一步到达的位置与马的距离都是\sqrt{5},假设马的坐标是(k,g),那么我们可以得到如果一个位置(i,j)与(k,g)的距离的平方是5,那么a(i,j)=0;,同样的如果(i,j)等于((g,k),啊(i,j)也等于0;

伪代码:

    输入C点坐标k,g,输入B点坐标n,m,

   for(i=0;i<=n;i++)

      a[i][0]=1;//将边缘先置为1,因为边缘都只有一条路到达

  for(j=0;j<=m;j++)

     a[0][j]=1;

    for(i=1;i<=n;i++)

       for(j=1;j<=m;j++)

            if(  ((i-k)*(i-k)+(j-g)*(j-g)==5)||(i==k&&j==g)  )

                 a[i][j]=0;

            else 

                a[i][j]=a[i-1][j]+a[i][j-1];

最后,a[n][m]就是到达B点的路线数量。

 点个赞呗!

  

    

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值