描述

马在中国象棋以日字形规则移动。

请编写一段程序,给定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

 于是我发这么一题傻题


 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int maxn=;
bool mp[maxn][maxn];
int ans;
int mx,my;
int sx,sy;
int ens;
int dirx[]={-,-,-,-,,,,},diry[]={-,,-,,-,,-,}; void dfs(int x,int y,int step){
if(step==ens){
ans++;
return;
}
for(int i=;i<;i++){
int xx=x+dirx[i],yy=y+diry[i];
if(xx<||xx>=mx||yy<||yy>=my) continue;
if(!mp[xx][yy]){
mp[xx][yy]=;
dfs(xx,yy,step+);
mp[xx][yy]=;
}
}
} int main(){
//freopen("temp.in","r",stdin);
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&mx,&my,&sx,&sy);
ens=mx*my;
mp[sx][sy]=; ans=;
dfs(sx,sy,);
printf("%d\n",ans);
mp[sx][sy]=;
}
return ;
}

我像风一样自由

就像你的温柔无法挽留

04-15 11:29