1265=马拦过河卒

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,m,c,b,i,j;
 5     scanf("%d %d %d %d",&n,&m,&c,&b);
 6     int a[20][20]= {0},t[20][20]= {0};//t作为标记数组,来标记这点是否可以通过。
 7     t[c][b]=1;//现将马所在的点标记为不可通过。
 8     int head[8]= {2,1,-1,-2,2,1,-1,-2},end[8]= {1,2,2,1,-1,-2,-2,-1};//表示马行走的坐标。
 9     for(i=0; i<8; i++)
10     {
11         if((c+head[i]>=0)&&(c+head[i]<=n)&&(b+end[i]>=0)&&(b+end[i]<=m))//马行走的也要在数据范围内。
12         t[c+head[i]][b+end[i]]=1;//按照象棋行走的规则,将马下一步可走的点全部标记为不可通过。
13     }
14     a[0][0]=1;//这里是从起点开始,且要标记为1.
15     for(j=0; j<=m; j++)
16     {
17         for(i=0; i<=n; i++)
18         {
19             if(t[i][j]==1)
20             {
21                 a[i][j]=0;//如果不能通过,则这里的a标记为0;
22             }
23             else if(i!=0&&j!=0)
24             {
25                 a[i][j]=a[i-1][j]+a[i][j-1];//讲左边和上边所代表的数加起来,表示达到这点的路径条数。
26             }
27             else if(i==0&&j!=0)//在边缘时,要查看左边和上边是否存在坐标。
28             {
29                 a[i][j]=a[i][j-1];
30             }
31             else if(j==0&&i!=0)
32             {
33                 a[i][j]=a[i-1][j];
34             }
35         }
36     }
37     printf("%d\n",a[n][m]);
38     return 0;
39 }

 

转载于:https://www.cnblogs.com/Angfe/p/10492494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值