zoukankan      html  css  js  c++  java
  • 马的遍历问题

    题意例如以下:

    马的遍历问题。设计程序完毕例如以下要求:
    在中国象棋棋盘上,对任一位置上放置的一个“马”.
    均能选择一个合适的路线,使得该棋子能按象棋的规则
    不反复地走过棋盘上的每一位置。


    思路:这是一个DFS搜索,然后没有使用另外的数组来标记某一位置是否已经被走过,而是直接使用存步数的数组num[][]来作为标记数组!


    然后我使用了两个数组作为方向坐标,以便能让马移动,同一时候也能记录马所在位置的坐标!(马是能够从8个移动方向中选择的!)


    代码还是非常好理解的!

    至于棋盘的规格能够自己设定,我这里是使用的8x8的棋盘!


    代码例如以下:

    /*
    马的遍历问题。设计程序完毕例如以下要求:
    在中国象棋棋盘上,对任一位置上放置的一个“马”.
    均能选择一个合适的路线,使得该棋子能按象棋的规则
    不反复地走过棋盘上的每一位置。程序输出8×8方阵.
    */
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int num[8][8],ans,step,n,m;
    int xx[8]= {2,1,-1,-2,-2,-1,1,2};
    int yy[8]= {1,2,2,1,-1,-2,-2,-1};
    bool is_ok(int x,int y)
    {
        if(x<0||x>7||y>7||y<0)
            return false;
        if(num[x][y])//不等于0表明这个位置已经被走过了!
            return false;
        return true;
    }
    void print()
    {
        ans++;
        printf("第【%d】个走法:
    ",ans);
        for(int i=0; i<8; i++)
        {
            for(int j=0; j<8; j++)
                printf("%4d",num[i][j]);
            printf("
    ");
        }
        printf("
    ");
        return ;
    }
    void dfs(int x,int y,int step)
    {
        for(int i=0; i<8; i++)
        {
            int X=xx[i]+x;
            int Y=yy[i]+y;
            if(is_ok(X,Y))
            {
                num[X][Y]=step;
                if(64==step)
                    print();
                else
                    dfs(X,Y,step+1);
                num[X][Y]=0;
            }
        }
    }
    int main()
    {
        int x,y;
        printf("请输入出发坐标:");
        scanf("%d%d",&x,&y);
        memset(num,0,sizeof(num));
        num[x][y]=1;
        ans=0;
        dfs(x,y,2);
        if(!ans)
        cout<<"没有合适的走法满足要求!
    ";
        cout<<"到此结束了...
    ";
        return 0;
    }
    


  • 相关阅读:
    圣杯+双飞翼 自适应布局
    drupal8 用户指南
    运维笔记:zabbix的运用(1)安装过程
    Nginx的初识
    PHP 获取LDAP服务器Schema数据
    Nginx(alias 和 root的区别)
    vue开发--生成token并保存到本地存储中
    PHP程序员必须知道的两种日志
    MVC 应用程序级别捕捉异常
    消息队列MQ
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4088194.html
Copyright © 2011-2022 走看看