跳马问题

跳马问题:
<wbr><wbr><wbr><wbr> 如图,在半张中国象棋的棋盘上(8X4),一只马从左下角跳到右上角,只允许往右跳,不允许往左跳,问能有多少种跳的方案。<br> 分析:此题可以采取递归的方法。站在固定的一个点上,最多可以有4个方向可以跳,设所在点坐标为x,y,则,dx=(1,2,2,1),dy=(2,1,-1,-2)(如图)。递归的边界是到达目标坐标点(8,4)。<wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><img title="跳马问题" height="300" alt="" src="http://images.cnblogs.com/cnblogs_com/gzydn/jump02.jpg" width="245" border="0"></wbr></wbr>

跳马问题 跳马问题 Code
<wbr>1</wbr>//跳马01
<wbr>2</wbr>program<wbr>tiaoma01;<br></wbr><wbr>3</wbr>const
<wbr>4</wbr><wbr><wbr><wbr><wbr><wbr><wbr>mbx</wbr></wbr></wbr></wbr></wbr></wbr>=8;<wbr>mby</wbr>=4;<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>//目标点所在的坐标
<wbr>5</wbr><wbr><wbr><wbr><wbr><wbr><wbr>dx:</wbr></wbr></wbr></wbr></wbr></wbr>array[1..4]of<wbr>integer</wbr>=(1,2,2,1);<wbr><wbr></wbr></wbr>//可以移动的坐标位移
<wbr>6</wbr><wbr><wbr><wbr><wbr><wbr><wbr>dy:</wbr></wbr></wbr></wbr></wbr></wbr>array[1..4]of<wbr>integer</wbr>=(2,1,-1,-2);
<wbr>7</wbr>var
<wbr>8</wbr><wbr><wbr><wbr><wbr><wbr><wbr>num:integer;<wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>//可以跳的方案数
<wbr>9</wbr>
10procedure<wbr>jump(x,y:integer);<br></wbr>11var<wbr>k,x1,y1:integer;<br></wbr>12<wbr><wbr><wbr><wbr>t1,t2,t3:boolean;<wbr><wbr><br></wbr></wbr></wbr></wbr></wbr></wbr>13begin
14<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>for<wbr>k:</wbr>=1<wbr></wbr>to<wbr></wbr>4<wbr></wbr>do
15<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>begin
16<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>x1:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>=x+dx[k];
17<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>y1:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>=y+dy[k];
18<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>t1:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>=(x1>=0)and(x1<=mbx);
19<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>t2:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>=(y1>=0)and(y1<=mby);
20<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>t3:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>=(x1=mbx)and(y1=mby);
21<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>if(t1<wbr></wbr>and<wbr>t2)<wbr></wbr></wbr>then
22<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>if<wbr>t3<wbr></wbr></wbr>then<wbr>inc(num)<br></wbr>23<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>else<wbr>jump(x1,y1);<wbr></wbr></wbr>//递归
24<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>end;
25end;
26
27begin
28<wbr><wbr><wbr><wbr>num:</wbr></wbr></wbr></wbr>=0;
29<wbr><wbr><wbr><wbr>jump(</wbr></wbr></wbr></wbr>0,0);
30<wbr><wbr><wbr><wbr>writeln(num);<br></wbr></wbr></wbr></wbr>31<wbr><wbr><wbr><wbr>readln;<br></wbr></wbr></wbr></wbr>32end.
33
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值