最少步数

这篇具有很好参考价值的文章主要介绍了最少步数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100*100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点的可能最少步数。

输入

共两行。

  • 第一行为:A点的坐标x,y,两个数之间用空格隔开。

  • 第二行为:B点的坐标x1,y1,两个数之间用空格隔开。

输出

共两行:

  • 第一行:A点到(1,1)的最少步数

  • 第二行:B点到(1,1)的最少步数

样例输入

12 16
18 10

样例输出

8
9

我无须多言,各位大佬自能看懂本蒟蒻的代码qwq



解法1:

#include<bits/stdc++.h>
using namespace std;
int di[13]={0,-2,-2,-1,-1,1,1,2,2,-2,-2,2,2},  //一共12个方向 
    dj[13]={0,1,-1,2,-2,2,-2,1,-1,2,-2,2,-2};
int c[105][105];   
bool f[105][105];              //标记是否走过 
int bfs(int x, int y)
{
    queue<int>qx, qy;
    qx.push(x),qy.push(y);
    memset(c,0,sizeof(c));  
    memset(f,0,sizeof(f));    //清零?为什么 
    f[x][y]=1,c[x][y]=0;      //标记该点走过,第一个点为0步 
    if(x==1&&y==1) return 0;
    while(!qx.empty())
    {
        for(int i=1;i<=12;i++) 
        {
            int a=qx.front()+di[i], b=qy.front()+dj[i];  
            if(a>=1&&b>=1&&a<=100&&b<=100&&f[a][b]==0)  //未越界,未走过 
            {
                if(a==1&&b==1) return c[qx.front()][qy.front()]+1;  //如果到了终点 
                qx.push(a),qy.push(b); //如果没有到终点,就开始搜索,入队列 
                f[a][b]=1;  //标记走过了 
                c[a][b]=c[qx.front()][qy.front()]+1;  //步数加1 
            }
        }
        qx.pop(),qy.pop();
    }
}
int main()
{
    int n1, n2, m1, m2;
    cin>>n1>>m1>>n2>>m2;
    cout<<bfs(n1, m1)<<endl;
    cout<<bfs(n2, m2);
}

解法2:
文章来源地址https://www.toymoban.com/news/detail-425111.html

#include<bits/stdc++.h>
using namespace std;
bool f[105][105];
int c[105][105];
int dx[13]={0,-2,-2,2,2,-2,-2,-1,1,2,2,-1,1},
    dy[13]={0,2,-2,-2,2,1,-1,2,2,1,-1,-2,-2};
int bfs(int h,int l)
{
    queue<int> qx,qy;
    memset(c,0,sizeof(c));
    memset(f,0,sizeof(f));
    c[h][l]=0;f[h][l]=1;
    qx.push(h);qy.push(l);
    while(qx.empty()!=1)
    {
        for(int i=1;i<=12;i++)
        {
            int sx=qx.front()+dx[i],sy=qy.front()+dy[i];
            if(sx<=100&&sx>=1&&sy<=100&&sy>=1&&f[sx][sy]==0)
            {
                c[sx][sy]=c[qx.front()][qy.front()]+1;
                qx.push(sx);qy.push(sy);
                f[sx][sy]=1;
            }
            if(qx.back()==1&&qy.back()==1){return c[1][1];}
        }
        qx.pop();qy.pop();
    }
} 
int main()
{
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    cout<<bfs(a,b)<<endl<<bfs(c,d);
}

到了这里,关于最少步数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java—提取字符串中指定的字符(取井号间的字符)

    有一字符串,格式为:“ #detailOne#detailTwo#detailThree# ”,现需要将“#”间的内容1、内容2和内容3分别提取出来,赋给 detailOne 、 detailTwo 和 detailThree ,其中内容1、内容2和内容3 均可能为空 (如:内容1为空,则字符串为:“##detailTwo#detailThree#”),且 内容长度不确定 。 字符

    2023年04月08日
    浏览(40)
  • 从0开始写中国象棋-创建棋盘与棋子

    考虑到象棋程序,其实就是数据结构与算法实现。 所以和界面相关的QT部分我们先放一放。 我们从控制台版本开始。这样大家更容易接受,也不影响开发。 后面我们会把控制台嫁接到QT上完成完整的游戏,那时候自然就水到渠成了。 中国象棋的棋盘是一个宽9列,长 5+5 = 10

    2024年02月07日
    浏览(35)
  • Autojs 利用OpenCV识别棋子之天天象棋你马没了

    本例子通过代码像你介绍利用OpenCV实现霍尔找圆的方法定位棋子位置 通过autojs脚本实现自动点击棋子 开源地址 主要函数利用autojs提供的 findCircles函数 在图片中寻找圆(做霍夫圆变换)。找到时返回找到的所有圆{x,y,radius}的数组,找不到时返回null。 一个寻找圆的例子: 具体

    2024年02月08日
    浏览(35)
  • 微信、支付宝修改步数【小米运动】

    小米运动是一款流行的健身应用,可以记录用户的步数和运动数据。然而,有些用户希望能够修改步数,以达到一些特定的目的。本文将介绍一个Python脚本,可以帮助用户实现修改小米运动步数的功能。 脚本介绍: 本脚本是一个Python脚本,用于修改小米运动步数。通过模拟

    2024年02月09日
    浏览(52)
  • C# 使用递归方法实现汉诺塔步数计算

    举一个例子:计算从 1 到 x 的总和 有三个石柱,在最左侧的石柱上从小到大摆放 N 层盘片,需要从最左侧的石柱移动到最右侧的石柱上,中间的石柱作为缓冲,一次只能移动一个盘片,且无论何时较小的盘片始终在较大的盘片上面。 这个问题求解这过程中搬运的次数 创建一

    2024年02月11日
    浏览(47)
  • 【图论】最小步数(双向广搜与A*算法)

    算法提高课笔记 原题链接 Rubik 先生在发明了风靡全球的魔方之后,又发明了它的二维版本——魔板。 这是一张有 8 个大小相同的格子的魔板: 我们知道魔板的每一个方格都有一种颜色。 这 8 种颜色用前 8 个正整数来表示。 可以用颜色的序列来表示一种魔板状态,规定从魔

    2024年02月14日
    浏览(34)
  • 基于单片机智能手环心率老人防跌倒心率体温 步数里程

      功能介绍 以STM32单片机作为主控系统;  OLED液晶显示心率体温步数等信息; 通过按键设置心率、体温上限设置; 当心率或者体温超过按键设置上限蜂鸣器进行声光报警提醒; 通过wifi模块esp8266把数据发送到手机端进行显 整个电路以5v供电;  电路图 源代码 元器件清单

    2024年02月12日
    浏览(34)
  • 华为OD机试 - 求最小步数(Java & JS & Python)

    题目描述 求从坐标零点到坐标点n的最小步数,一次只能沿横坐标轴向左或向右移动 2 或 3。 注意:途径的坐标点可以为负数 输入描述 坐标点n 输出描述 输出从坐标零点移动到坐标点n的最小步数 备注 1 = n = 10^9 用例 输入 4 输出 2 说明 从坐标零点移动到4,最小需要两步,即

    2024年02月13日
    浏览(42)
  • uniapp微信小程序获取微信运动步数(保姆级教程)

    官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html 可以先了解一下,然后下载对应的解密文件 找到对应的解密语言版本,老师这里用的uniapp,只能选择node版 这里有具体的案例,可以参考一下,直接在代码中导入,在上面的getStepInfo方法中直接实例化

    2024年02月06日
    浏览(46)
  • 物联网毕设(基于STM32的蓝牙检测心率+步数+手机APP)

    目录 流程图 开发所需平台 keil5+Android studio 需要的元器件 线路连接图 stm32F103C8T6 蓝牙模块 心率模块(MAX30102)  震动开关(SW-18015P)  手机APP  实验效果 程序链接 底层 APP keil5+Android studio 线路连接图   stm32F103C8T6 蓝牙模块 ( JDY-31 蓝牙 SPP)我选择的是无主机的,这里可以修改

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包