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 }

 

posted @ 2019-03-07 21:28  念文丶  阅读(288)  评论(0编辑  收藏  举报