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

    【题目】

    中国象棋半张棋盘如图4(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左跳。比如图4(a)中所示为一种跳行路线,并将所经路线打印出来。打印格式为:0,0->2,1->3,3->1,4->3,5->2,7->4,8…
     

    【算法分析】

           如图4(b),马最多有四个方向,若原来的横坐标为j、纵坐标为i,则四个方向的移动可表示为:
    1:  (i,j)→(i+2,j+1);  (i<3,j<8)
    2:  (i,j)→(i+1,j+2);  (i<4,j<7)
    3:  (i,j)→(i-1,j+2);  (i>0,j<7)
    4:  (i,j)→(i-2,j+1);  (i>1,j<8)
         搜索策略:
            S1:A[1]:=(0,0);
            S2:从A[1]出发,按移动规则依次选定某个方向,如果达到的是(4,8)则转向S3,否则继续搜索下一个到达的顶点;
            S3:打印路径。

     【代码】

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int a[10][10],t=0;
    int h[4]= {1,2,2,1}; //横坐标
    int z[4]= {2,1,-1,-2}; //纵坐标
    int search(int);
    int print(int);
    
    int main() {
        a[1][1]=a[1][2]=0;
        search(2);
        return 0;
    }
    
    int search(int i) {
        for(int j=0; j<4; j++)
            if(a[i-1][2]+h[j]>=0 && a[i-1][2]+h[j]<=8 && a[i-1][1]+z[j]>=0 && a[i-1][1]<=4) {
                a[i][1]=a[i-1][1]+z[j];
                a[i][2]=a[i-1][2]+h[j];
                if(a[i][1]==4 && a[i][2]==8) print(i);
                else search(i+1);
            }
    }
    
    int print(int e) {
        t++;
        cout<<t<<": ";
        for (int i=1; i<=e-1; i++)
            cout<<a[i][1]<<","<<a[i][2]<<"-->";
        cout<<"4,8"<<endl;
    }
    View Code

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    为什么叫 React Hooks
    谈谈 Promise 以及实现 Fetch 的思路
    Mac使用tree查看目录结构
    Mac下Nginx安装教程
    Mac包管理工具brew的安装、使用及换源
    Mac安装cnpm
    10分钟快速搭建可用的springboot-web项目
    【转载】ibit-mybatis介绍
    【转载】sql-builder介绍
    Java软件工程师技能图谱
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6607560.html
Copyright © 2011-2022 走看看