洛谷 P1747 好奇怪的游戏

题目背景

《爱与愁的故事第三弹·shopping》娱乐章。

调调口味来道水题。

题目描述

爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点 �1,�1x1​,y1​ 和 �2,�2x2​,y2​ 上。它们得从点 �1,�1x1​,y1​ 和 �2,�2x2​,y2​ 走到 (1,1)(1,1)。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到 (1,1)(1,1) 的最少步数,你能帮他解决这个问题么?

注意不能走到 �x 或 �y 坐标 ≤0≤0 的位置。

输入格式

第一行两个整数 �1,�1x1​,y1​。

第二行两个整数 �2,�2x2​,y2​。

输出格式

第一行一个整数,表示黑马到 (1,1)(1,1) 的步数。

第二行一个整数,表示白马到 (1,1)(1,1) 的步数。

输入输出样例

输入 #1复制

12 16
18 10

输出 #1复制

8 
9

说明/提示

数据范围及约定

对于 100%100% 数据,1≤�1,�1,�2,�2≤201≤x1​,y1​,x2​,y2​≤20。

分析:

        对于该题,我们选择bfs,难点主要有三个,一个是如何走 日 如何走田  一个是怎么去表示走的步数,另一个就是对于二维数组我们怎么去存到队列里。

        对于第一个问题呢,我们还是用最简单的数组方法去实现走日和走田。定义xrr yrr分别存储x和y方向,拿走日为例,如果马向右上走,那是不是x需要加一,同时y需要加一,如果往右下走呢,是不是x需要加一,y需要减一...那么一共有多少种情况呢?如果把走田也算上的话一共有12种情况:走日:右上,右下,左上...走田:右上,右下,左上,左下。那我们就可定义xrr[12],yrr[12],分别储存右上,右下..等12种情况,到时候加一个循环是不是就可以实现了。

        对于第二个问题,如何表示步数,我们可以把地图用二维数组map表示,map的值初始化为-1,每到一个点我们就把他赋值为队列第一个点的数值加一。(这里因用的是bfs,和queue结合使用,如果不是很了解bfs的同学建议先去学习bfs的原理)

        对于第三个问题,如何把一个点存到队列里,我比较菜,没想到更好地方法,我就开了两个队列,分别存储点的x和y值,这样两个队列一结合就是求得map里的点。

        OK,那么bfs部就没什么好说的,还是那些固定模板,上代码!

代码:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int xrr[12] = { 1,1,-1,-1,2,2,-2,-2, 2,2,-2,-2 };//日:右上 右下 左上 左下 右右上 右右下 左左上 左左下 田:右上 右下 左上 左下
int yrr[12] = { 2,-2,2,-2,1,-1,1,-1, -2,2,-2,2 };
int bx, by, wx, wy;
int map[62][62];
queue<int>q_x;//放一个点的x数值
queue<int>q_y;//放一个点的y数值void bfs(int x, int y)
{bool sign = false;//用来记录是否找到了1,1while (q_x.size()){for (int i = 0; i < 12; i++){int tx, ty;tx = q_x.front() + xrr[i];ty = q_y.front() + yrr[i];if (tx < 1 || ty < 1)continue;if (map[tx][ty] != -1)continue;q_x.push(tx);q_y.push(ty);map[tx][ty] = map[q_x.front()][q_y.front()] + 1;//用map数值来表示多少步if (tx == 1 && ty == 1){cout << map[tx][ty] << endl;sign = true;break;}}if (sign == true)break;q_x.pop();q_y.pop();}
}int main()
{cin >> bx >> by >> wx >> wy;//黑马memset(map, -1, sizeof(map));//把map全部重置成-1map[bx][by] = 0;//把起点记为0,表示不需要操作就能到q_x.push(bx);//x入队q_y.push(by);//y入队bfs(bx, by);//清空队列和地图queue<int>empty1;queue<int>empty2;swap(q_x, empty1);//清空栈swap(q_y, empty2);//清空栈//白马memset(map, -1, sizeof(map));map[wx][wy] = 0;q_x.push(wx);q_y.push(wy);bfs(wx, wy);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA简介

FPGA&#xff08;Field-Programmable Gate Array&#xff09;是一种可编程逻辑器件&#xff0c;用于实现数字电路的设计和实现。与传统的ASIC&#xff08;Application-Specific Integrated Circuit&#xff09;相比&#xff0c;FPGA具有可重新配置的特性&#xff0c;可以根据需…

nginx报错相关问题

D:\nginx-1.22.0>nginx -s stop nginx: [emerg] unknown directive “锘?user” in D:\nginx-1.22.0/conf/nginx.conf:1 编码问题&#xff0c;还好我提前压缩了nginx的压缩包&#xff0c;具体哪行我没发现&#xff0c;复制过去就好了 D:\nginx-1.22.0>nginx -s stop ngi…

从数据孤岛到信息共享,应用集成网关打造业务新生态

想象一下&#xff0c;你坐在剧院里&#xff0c;期待着享受一场精彩的音乐剧表演。但当灯光渐暗&#xff0c;音乐开始奏响时&#xff0c;你却发现演出陷入了混乱之中&#xff1a;没有人站在正确的位置&#xff0c;每个人都在互相交谈或保持沉默&#xff0c;管弦乐队的演奏时机也…

0基础学习Mybatis系列数据库操作框架——增删改操作

大纲 新增Mapper配置代码Mapper接口文件应用 删除简单方案Mapper配置代码 高级方案Mapper配置代码Mapper接口文件应用 完整代码 修改Mapper配置代码Mapper接口文件应用 参考资料 在《0基础学习Mybatis系列数据库操作框架——目录结构》一文中&#xff0c;我们已经搭建了查询操作…

绿色wordpress外贸建站模板

绿色wordpress外贸建站模板 https://www.mymoban.com/wordpress/6.html

【JavaScript编程】encodeURI和encodeURIComponent的区别

一、encodeURI encodeURI函数主要用于编码整个URL。当URL中包含非ASCII字符、空格或其他在URL中有特殊意义的字符时&#xff0c;可以使用encodeURI进行编码。下面是一个使用encodeURI的例子&#xff1a; // 假设有一个URL var url "https://www.example.com/index.html?…

Oracle控制文件管理

控制文件作用&#xff1a;记录了数据库的结构和行为&#xff0c;有多少个数据文件&#xff0c;日志文件及其位置名称&#xff0c;状态&#xff0c;维护数据库的一致性&#xff0c;即记录了数据库的启动SCN号和终止SCN号。 控制文件的位置和个数记录在参数文件中&#xff0c;通…

C语言什么是局部变量?

一、问题 C程序中的变量有局部变量和全局变量&#xff0c;那么什么是局部变量呢&#xff1f; 二、解答 局部变量也称为内部变量&#xff0c;即在函数内部定义的变量。它只在本函数范围内有效&#xff0c;在函数外是不能使⽤该变量的。例如&#xff1a; int f1(int a) {int b,…

Android 窗口那些事儿

目录 1. &#x1f4c2; 前言 你&#xff0c;是否有过这些疑问&#xff1f; 2. &#x1f531; Window 2.1 认识 Window 的几个阶段 1&#xff09;阶段一&#xff1a;Window 约等于 Activity 2&#xff09;阶段二&#xff1a;Window 约等于 View 3&#xff09;阶段三&…

基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文详细介绍基于YOLOv8/v7/v6/v5的危险物品检测技术。主要采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法&#xff0c;进行了细致的性能指标对比分析。博客详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码…

Git 实战教程

Git 是一款强大的分布式版本控制系统&#xff0c;广泛用于团队协作与项目管理。本文将为你提供一份 Git 的实战教程&#xff0c;通过实例演示 Git 的基本用法和高级特性&#xff0c;帮助你快速上手 Git。 一、Git 基础 安装 Git 首先&#xff0c;你需要在你的计算机上安装 G…

保健品wordpress外贸模板

保健品wordpress外贸模板 健康保养保健品wordpress外贸模板&#xff0c;做大健康行业的企业官方网站模板。 https://www.jianzhanpress.com/?p3514

蓝桥杯刷题第八天(dp专题)

这道题有点像小学奥数题&#xff0c;解题的关键主要是&#xff1a; 有2种走法固走到第i级阶梯&#xff0c;可以通过计算走到第i-1级和第i-2级的走法和&#xff0c;可以初始化走到第1级楼梯和走到第2级楼梯。分别为f[1]1;f[2]1(11)1(2)2.然后就可以循环遍历到后面的状态。 f[i…

XenCenter 2024 创建一个虚拟机

前言 实现&#xff0c;创建一个虚拟机&#xff0c;内存&#xff0c;cpu&#xff0c;磁盘&#xff0c;名称&#xff0c;网卡&#xff0c;配置 Xen Center 2024 download 创建虚拟机 选择系统类型 定义虚拟机名称 选择ISO镜像库 选择主服务器 分配虚拟机内存&#xff0c;cpu资源…

观察和配置MAC地址表

目录 原理概述 实验目的 实验内容 实验拓扑 ​编辑1&#xff0e;基本配置 2.观察正常状态时的MAC地址表 4.配置静态MAC地址表项 原理概述 MAC 地址表是交换机的一个核心组成部分&#xff0c;交换机主要是根据 MAC 地址表来进行帧的转发的。交换机对帧的转发操作行为一共有…

[Python学习篇] Python变量

变量的作用 计算机的存储分为内存储器即内存&#xff0c;外存储器即硬盘&#xff0c;程序运行代码在内存中运行&#xff0c;内存可以理解为一块一块的存储地址&#xff0c;变量就是给某一块内存地址起的一个名字&#xff0c;变量的值就存储在这块内存中&#xff0c;通过变量名称…

OpenHarmony实战:轻量带屏解决方案之恒玄芯片移植案例

本文章基于恒玄科技 BES2600W 芯片的欧智通 Multi-modal V200Z-R 开发板&#xff0c;进行轻量带屏开发板的标准移植&#xff0c;开发了智能开关面板样例&#xff0c;同时实现了 ace_engine_lite、arkui_ui_lite、aafwk_lite、appexecfwk_lite、HDF 等部件基于 OpenHarmony Lite…

集成电路企业tapeout,如何保证机台数据准确、完整、高效地采集?

Tapeout即流片&#xff0c;集成电路行业中将CDS最终版电路图提交给半导体制造厂商进行物理生产的过程。在芯片设计与制造的流程中&#xff0c;Tapeout是非常重要的阶段&#xff0c;包括了布局&#xff08;Layout&#xff09;、连线&#xff08;Routing&#xff09;、分析&#…

Linux下使用vim文本编辑器

linux自带vi编辑器&#xff0c;使用升级版vim输入命令 sudo apt install vim 1.文件操作 vim 文件名&#xff1a;打开文件2.命令行模式 &#xff1a;进入命令行 q 退出 q! 退出不保存 wq 保存退出3.三种模式…

Linux 线程互斥、互斥量、可重入与线程安全

目录 一、线程互斥 1、回顾相关概念 2、抢票场景分析代码 多个线程同时操作全局变量 产生原因 如何解决 二、互斥量 1、概念 2、初始化互斥量&#xff1a; 方法1&#xff1a;静态分配 方法2&#xff1a;动态分配 3、销毁互斥量&#xff1a; 4、加锁和解锁 示例抢…