首页 > 代码库 > 哈尔滨理工大学2016新生赛A题
哈尔滨理工大学2016新生赛A题
一名骑着马的强盗闯进了原本平静祥和的棋盘村,为了通知村里的士兵来打败强盗,你必须要通知位于棋盘村最下方的兵营。棋盘村的地形就像是一张棋盘,你所在的位置为A点(0,0),兵营位于棋盘村的右下角B点(n,m)。你每次只能走一步,可以选择向下走,也可以选择向右走。但是强盗所在的位置和强盗的马一次所能跳到的位置是不可以走过去的(强盗的马的移动方法与象棋中的马相同)。请计算出从A点能够走到B点的所有路径条数。
首先输入一个整数t,代表有t组测试数据。
每组测试数据为四个整数,即B点的坐标(n,m)和强盗的坐标(x,y)。
1 < n,m < 20.
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 int i,j,x,y,n,m,f[100][100]; 8 long long ans[100][100]; 9 int t; 10 scanf("%d", &t); 11 while (t--) { 12 scanf("%d%d%d%d",&n,&m,&x,&y); 13 memset(f,1,sizeof(f)); 14 memset(ans,0,sizeof(ans)); 15 ans[0][0]=1; 16 f[x][y]=0,f[x+1][y+2]=0,f[x-1][y+2]=0; 17 f[x+1][y-2]=0,f[x-1][y-2]=0,f[x+2][y+1]=0; 18 f[x-2][y+1]=0,f[x+2][y-1]=0,f[x-2][y-1]=0; 19 for (i=1; i<=n; i++) 20 if (f[i][0]) 21 ans[i][0]=1; 22 else break; 23 for (i=1; i<=m; i++) 24 if (f[0][i]) 25 ans[0][i]=1; 26 else break; 27 for (i=1; i<=n; i++) 28 for (j=1; j<=m; j++) 29 if (f[i][j]) 30 ans[i][j]=ans[i-1][j]+ans[i][j-1]; 31 printf("%lld\n",ans[n][m]); 32 } 33 return 0; 34 }
哈尔滨理工大学2016新生赛A题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。