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 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类