• 第一个博客


    今天是第一篇博客,希望大家多多关照噢~

    今天我们来说——马的遍历

    注意

    这不是洛谷上的那一道

    但是是类似的一道题

    好好好

    我们开始吧

    2.马的遍历(horse)

    【题目描述】

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

    请编写一段程序,给定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<cstdio>
    #include<cstring>
    int vis[100][100],n,m,x,y,nm,ans=0;
    int a[8][2]={{1,2},{-1,2},{1,-2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
    void dfs(int x,int y,int step)
    {
        if(step==nm)
        {
            ans++;
        }        
        else
        { 
            for(int i=0;i<8;i++)
            {
                int tmpx=x+a[i][0];
                int tmpy=y+a[i][1];
                if(tmpx>=0&&tmpx<n&&tmpy>=0&&tmpy<m&&!vis[tmpx][tmpy])
                {
                    vis[tmpx][tmpy]=1;
                    dfs(tmpx,tmpy,step+1);
                    vis[tmpx][tmpy]=0;            
                }        
            }
        } 
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        memset(vis,0,sizeof(vis));
        scanf("%d%d%d%d",&n,&m,&x,&y);
        nm=n*m; 
        ans=0;
        vis[x0][y0]=1;
        dfs(x0,y0,1);
        printf("%d
    ",ans);    
        return 0;
    }

    这个代码中的memset都了解吼

    他就是"一键数组赋值"

    组成是:

    memset(数组名,赋的值,数组的尺寸)

    然后用a数组存马走的方向

    接着递归深搜

    就出来了……

    出来了……

    来了……

    了……

    ……

     

     

    拜了个拜

     

     

  • 相关阅读:
    ASM认证与口令文件
    asm 兼容性、asm 主要参数管理
    最常见的5个导致 RAC 实例崩溃的问题
    oracle隐含参数的查看与修改
    三种 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
    Oracle RAC TAF 无缝failover
    oracle rac的特征
    安装ORACLE时在Linux上设置内核参数的含义
    关于GCC的理解——On the understanding of the GCC
    java中的闭包和回调
  • 原文地址:https://www.cnblogs.com/wwLucas-Blog-Welcome/p/12896635.html
Copyright © 2020-2023  润新知