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)

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int sum;
    int a[100][3];
    int y[4]={2,1,-1,-2},x[4]={1,2,2,1};//马可走的方向
    int search(int x);
    int print(int);
    int main()
    {
    a[1][1]=0;a[1][2]=0;//第一个点的横纵坐标
    search(2);//从第二个点开始走
    return 0;
    }
    int search(int w)
    {
    for(int i=0;i<=3;i++)
    {
    if(a[w-1][1]+x[i]>=0&&a[w-1][1]+x[i]<=8&&a[w-1][2]+y[i]>=0&&a[w-1][2]+y[i]<=4)//判断是否越界
    {
    a[w][1]=a[w-1][1]+x[i];
    a[w][2]=a[w-1][2]+y[i];
    if(a[w][1]==8&&a[w][2]==4)print(w);//走到终点
    else
    search(w+1);//否则走下一个
    }
    }
    }
    int print(int ii)
    {
    sum++;
    cout<<sum<<": ";
    for(int i=1;i<=ii-1;i++)
    {
    cout<<a[i][1]<<","<<a[i][2]<<"-->";
    }
    cout<<"8,4";
    cout<<endl;
    }

  • 相关阅读:
    python中自定义模块导入
    EditText------Android
    Fragment类实现
    Android文件访问
    python中pip使用国内镜像提高安装速度
    esri/geometry包 (arcgis api for js)
    【CSDN 编辑器 MarkDowm 使用技巧】
    for 循环 :从指定下标开始,并指定步长
    【车牌识别】-车牌中字符分割代码详解
    【 Linux 常用命令】
  • 原文地址:https://www.cnblogs.com/zzyh/p/6609411.html
Copyright © 2011-2022 走看看