openjudge8465:马走日 [搜索]

描述

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

请编写一段程序,给定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\n",ans);
40         mp[sx][sy]=0;
41     }
42     return 0;
43 }

我像风一样自由

就像你的温柔无法挽留

转载于:https://www.cnblogs.com/ZYBGMZL/p/6901533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值