NeQrhk 2016-05-13 09:17 采纳率: 30.6%
浏览 1480
已采纳

谁帮忙看看这道题目,我写的代码一直过不了

B:马走日
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 1024kB
描述
马在中国象棋以日字形规则移动。

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

  • 写回答

6条回答 默认 最新

  • 小灸舞 2016-05-13 09:24
    关注

    仅供参考:

     #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int sx[8]={1,1,-1,-1,2,2,-2,-2};
    int sy[8]={2,-2,2,-2,1,-1,1,-1};
    int t,n,m,x,y,ans;
    bool b[20][20];
    void dfs(int dep,int s,int t){
        if (dep==n*m){
            ans++; return;
        }
        for (int r=0;r<8;++r){
            int x=s+sx[r]; int y=t+sy[r];
            if (!b[x][y]&&x>0&&y>0&&x<=n&&y<=m){
                b[x][y]=true;
                dfs(dep+1,x,y);
                b[x][y]=false;
            }
        }
    }
    int main(){
        scanf("%d",&t);
        while (t--){
            scanf("%d%d",&n,&m);
            scanf("%d%d",&x,&y); ++x; ++y;
            memset(b,0,sizeof(b)); ans=0,b[x][y]=true; 
            dfs(1,x,y);
            printf("%d\n",ans);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?