描述
马在中国象棋以日字形规则移动。
请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。
输入
第一行为整数T(T < 10),表示测试数据组数。
每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)
输出
每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。
样例输入
1 5 4 0 0
样例输出
32
生活中需要一些5分钟写出来的傻题
但是我CE了三次!!!
error: reference to ‘end’ is ambiguous
于是我发这么一题傻题
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 6 const int maxn=10; 7 bool mp[maxn][maxn]; 8 int ans; 9 int mx,my; 10 int sx,sy; 11 int ens; 12 int dirx[8]={-1,-1,-2,-2,1,1,2,2},diry[8]={-2,2,-1,1,-2,2,-1,1}; 13 14 void dfs(int x,int y,int step){ 15 if(step==ens){ 16 ans++; 17 return; 18 } 19 for(int i=0;i<8;i++){ 20 int xx=x+dirx[i],yy=y+diry[i]; 21 if(xx<0||xx>=mx||yy<0||yy>=my) continue; 22 if(!mp[xx][yy]){ 23 mp[xx][yy]=1; 24 dfs(xx,yy,step+1); 25 mp[xx][yy]=0; 26 } 27 } 28 } 29 30 int main(){ 31 //freopen("temp.in","r",stdin); 32 int T; 33 scanf("%d",&T); 34 while(T--){ 35 scanf("%d%d%d%d",&mx,&my,&sx,&sy); 36 ens=mx*my; 37 mp[sx][sy]=1; ans=0; 38 dfs(sx,sy,1); 39 printf("%d ",ans); 40 mp[sx][sy]=0; 41 } 42 return 0; 43 }
我像风一样自由
就像你的温柔无法挽留