若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

3149: 搜索基础之马走日

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,500

题目描述

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

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

参考代码

#include<stdio.h>
#include<string.h>
void mazouri(int x,int y,int Q);
int a[11][11],n,m,sum=0,nm;
void mazouri(int x,int y,int Q) 
{
    if(Q==n*m) 
    {
        sum++;
        return;
    } else 
    {
        if(x-1>=0&&x-1<n&&y+2>=0&&y+2<m&&a[x-1][y+2]==0) 
        {
            a[x-1][y+2]=1;
            mazouri(x-1,y+2,Q+1);
            a[x-1][y+2]=0;
        }
        if(x+1>=0&&x+1<n&&y+2>=0&&y+2<m&&a[x+1][y+2]==0) 
        {
            a[x+1][y+2]=1;
            mazouri(x+1,y+2,Q+1);
            a[x+1][y+2]=0;
        }
        if(x+2>=0&&x+2<n&&y+1>=0&&y+1<m&&a[x+2][y+1]==0) 
        {
            a[x+2][y+1]=1;
            mazouri(x+2,y+1,Q+1);
            a[x+2][y+1]=0;
        }
        if(x+2>=0&&x+2<n&&y-1>=0&&y-1<m&&a[x+2][y-1]==0) 
        {
            a[x+2][y-1]=1;
            mazouri(x+2,y-1,Q+1);
            a[x+2][y-1]=0;
        }
        if(x+1>=0&&x+1<n&&y-2>=0&&y-2<m&&a[x+1][y-2]==0) 
        {
            a[x+1][y-2]=1;
            mazouri(x+1,y-2,Q+1);
            a[x+1][y-2]=0;
        }
        if(x-1>=0&&x-1<n&&y-2>=0&&y-2<m&&a[x-1][y-2]==0) 
        {
            a[x-1][y-2]=1;
            mazouri(x-1,y-2,Q+1);
            a[x-1][y-2]=0;
        }
        if(x-2>=0&&x-2<n&&y-1>=0&&y-1<m&&a[x-2][y-1]==0) 
        {
            a[x-2][y-1]=1;
            mazouri(x-2,y-1,Q+1);
            a[x-2][y-1]=0;
        }
        if(x-2>=0&&x-2<n&&y+1>=0&&y+1<m&&a[x-2][y+1]==0) 
        {
            a[x-2][y+1]=1;
            mazouri(x-2,y+1,Q+1);
            a[x-2][y+1]=0;
        }
    }
}
int main() 
{
    int T,x,y;
    scanf("%d",&T);
    while(T--) 
    {
        memset(a,0,sizeof(a));
        scanf("%d %d %d %d",&n,&m,&x,&y);
        sum=0;
        a[x][y]=1;
        mazouri(x,y,1);
        printf("%dn",sum);
    }
    return 0;
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Skip Dreams孤独患者 原站点
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist