【SSL 1823】消灭怪物(非传统BFS)

news2024/12/23 20:02:04

题目大意

小b现在玩一个极其无聊的游戏,它控制角色从基地出发,一路狂奔夺走了对方的水晶,可是正准备回城时,发现地图上已经生成了 n n n 个怪。

现在假设地图是二维平面,所有的怪和角色都认为是在这个二维平面的点上。请你帮小b计算一下,从现在角色的位置开始,至少要消灭几个怪才能回到基地(坐标原点)。

注意:小b控制的角色只能沿平行于坐标轴的方向移动(东、西、南、北),而且每次必须移动整数距离。
数据范围
1 ≤ n ≤ 50000 1≤n≤50000 1n50000
1 ≤ x , y ≤ 1000 1≤x,y≤1000 1x,y1000

输入格式

第一行包含三个整数: n n n 以及角色的初始位置 ( x , y ) (x,y) (x,y)

接下来 n n n 行,每行包含一个怪的位置坐标 ( x , y ) (x,y) (x,y)

输出格式

一个数,表示最少要消灭的怪的个数。

输入样例

7 6 3
6 2
5 2
4 3
2 1
7 3
5 4
6 4

输出样例

1

基本思路

知道起点和终点,每次扩展一步,题目具有 b f s bfs bfs 的特征。

但是单纯 b f s bfs bfs 它只会管几层,而不会处理路过怪物数量。但题目要求最少经过怪物,所以绕路是十分必要的,而普通 b f s bfs bfs 中可能会让有怪物的点优先扩展,而违背了这个原则。
在这里插入图片描述

所以我们要介绍一个新东西,双端队列 d e q u e deque deque。顾名思义,就是队首队尾都可以进出元素。所以我们可以让无怪物的点从队头进,有怪物的点从队尾进,取的时候仍是从队头取。这样就可以尽可能绕开怪物,而不会让不得不消灭的怪物被排除。

核心代码

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e3+10;
struct node{
	int x,y,cnt;
};
int n,sx,sy,w[4][2]={{0,1},{1,0},{0,-1},{-1,0}},ans=0x3f3f3f3f;
bool v[N][N],a[N][N];
deque<node>q;
inline int bfs(){
	q.push_back({sx,sy,0});
	v[sx][sy]=true;
	while(!q.empty()){
		node u=q.front();
		q.pop_front();
		if(u.x==0&&u.y==0)
			return u.cnt;//到达终点
		for(int i=0;i<4;i++){
			int xx=u.x+w[i][0],yy=u.y+w[i][1];
			if(xx<0||xx>=N||yy<0||yy>=N) continue;
			if(v[xx][yy]==true) continue;
			if(a[xx][yy]==true)
				q.push_back({xx,yy,u.cnt+1});
			else
				q.push_front({xx,yy,u.cnt});
			v[xx][yy]=true;
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>sx>>sy;
	for(int i=1,x,y;i<=n;i++){
		cin>>x>>y;
		a[x][y]=true;
	}
	cout<<bfs();
	return 0;
}

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

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

相关文章

鸿翼夯实统一AI基础设施,加速大模型落地释放AI“模”力!

从“百模大战”到“千模大战”&#xff0c;全球通用大模型数量快速增加&#xff0c;将大模型融入企业&#xff0c;建立企业自身的AI基础设施&#xff0c;打造行业或特定领域、任务的专用大模型&#xff0c;助力生产力革新和产业升级&#xff0c;已经成为目前企业关注的核心。 大…

Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户填充功能

文章目录 什么是 AOP &#xff1f;.Net Core 中 有哪些 AOP 框架&#xff1f;基于 Castle DynamicProxy 实现 AOPIOC中使用 Castle DynamicProxy实现事务管理实现用户自动填充 什么是 AOP &#xff1f; AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&a…

实验二 图像的代数运算

一、实验目的&#xff1a; 1&#xff0e;了解图像的算术运算在数字图像处理中的初步应用。 2&#xff0e;体会图像算术运算处理的过程和处理前后图像的变化。 二、实验内容&#xff1a; 1&#xff0e;图像的加法运算 图像相加一般用于对同一场景的多幅图像求平均效果&…

c语言回顾-内存操作函数

目录 前言 1.memcpy 函数 1.1函数介绍 1.2与strcpy的区别 1.3memcpy的模拟 2.memmove 函数 2.1函数介绍和使用 2.2函数的模拟 3.memset函数 3.1函数介绍 3.2函数的模拟 4.memcmp函数 4.1函数的使用 4.2函数的模拟 结束语 前言 在动态内存的章节中小编详细讲解了动…

pandas数据分析(7)

组合DataFrame 连接 如果只是要将多个DataFrame粘合在一起&#xff0c;那么concat函数是最佳选择。在默认情况下&#xff0c;concat会将DataFrame按行粘合在一起&#xff0c;同时会将各列自动对齐。 如果想要按列进行粘合&#xff0c;需要将axis设置为1&#xff1a; concat的特…

​香橙派AIpro测评:usb鱼眼摄像头的Camera图像获取

一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比&#xff0c;同时还可以兼容ubuntu、安卓等多种操作系统&#xff0c;今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV5s算法的部署并使用一个外接的鱼眼USB摄像头…

【Git 学习笔记】gitk 命令与 git log 其他参数的使用

1.7 用 gitk 查看提交历史 # make sure you have gitk installed $ which gitk /usr/bin/gitk # Sync the commit ID $ git checkout master && git reset --hard 13dcad # bring up the gitk interface, --all to see everything $ gitk --all &实测结果&#xf…

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数&#xff08;m_track&#xff09;、绘…

网络数据传输中的封装与解封装详解

注&#xff1a;机翻&#xff0c;未校对。 The goal of networks is to transmit data from one host to another. 网络的目标是将数据从一个主机传输到另一个主机。 Encapsulation 封装 To achieve this goal, each layer adds its own header to the data. A header contain…

2024年7月5日 十二生肖 今日运势

小运播报&#xff1a;2024年7月5日&#xff0c;星期五&#xff0c;农历五月三十 &#xff08;甲辰年庚午月庚午日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;狗、羊、虎 需要注意&#xff1a;鸡、牛、鼠 喜神方位&#xff1a;西北方 财神方位&#xff1a;正…

深圳合规新动向,这个关键环节要做好

随着全球商业环境的日益复杂化&#xff0c;企业合规管理已成为维护公司稳健运营和市场竞争力的核心要素。特别是对于位于创新前沿的深圳市&#xff0c;有效的合规管理系统不仅是满足法律和监管要求的必须&#xff0c;更是企业可持续发展的关键。 深圳市在全国率先探索并成功实…

#数据结构 笔记三

二叉树 1. 概念 二叉树Binary Tree是n个结点的有限集合。它或者是空集n0&#xff0c;或者是由一个根结点以及两颗互不相交、分别称为左子树和右子树的二叉树组成。 二叉树与普通有序树不同&#xff0c;二叉树严格区分左子和右子&#xff0c;即使只有一个子结点也要区分左右。…

cloudreve 设置开机服务

创建一个Systemd服务文件&#xff1a; 打开终端并创建一个新的服务文件&#xff1a; sudo nano /etc/systemd/system/cloudreve.service 在服务文件中添加以下内容&#xff1a; 根据你的设置调整路径和参数&#xff0c;然后将以下配置粘贴到文件中&#xff1a; [Unit] Descri…

二分查找及其变种

一、概念 二分查找算法&#xff08;Binary Search Algorithm&#xff09;是一种在有序数组中查找特定元素的高效搜索方法。 其基本思想是将目标值与数组中间的元素进行比较&#xff0c;如果目标值等于中间元素&#xff0c;则查找成功&#xff1b;如果目标值小于中间元素&…

指标和量化交易那些事儿

最近很多朋友都在给我说&#xff0c;我要盘中打板的指标&#xff0c;我要盘中自动交易。今天我们来梳理下关于指标和量化交易这些事儿&#xff01; 第一&#xff1a;什么是指标&#xff1f;股票指标是属于统计学的范畴&#xff0c;依据一定的数理统计方法&#xff0c;运用一些…

2024 年 亚太赛 APMCM (C题)中文赛道国际大学生数学建模挑战赛 | 量子计算的物流配送 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; 完整内容可以在文章末尾领取&#xff01; 该段文字…

PyTorch - 神经网络基础

神经网络的主要原理包括一组基本元素&#xff0c;即人工神经元或感知器。它包括几个基本输入&#xff0c;例如 x1、x2… xn &#xff0c;如果总和大于激活电位&#xff0c;则会产生二进制输出。 样本神经元的示意图如下所述。 产生的输出可以被认为是具有激活电位或偏差的加权…

班迪录屏(Bandicam)7.0下载以及安装教程

最近有小伙伴私信我&#xff0c;问我有没有好用的录屏工具&#xff0c;今天给大家分享一个我一直在使用的录屏工具&#xff0c;也是解锁了V1P版本&#xff0c;绿色版打开就可以使用~ Bandicam录屏&#xff08;PC&#xff09; Bandicam录屏是一款专为捕捉屏幕精彩瞬间而设计的…

go——Swagger使用

一. 为什么后端需要配置Swagger 在前后端分离的项目中&#xff0c;后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。 Swagger是一个用于设计&#xff0c;构建和文档化API的开源框架。在Go语言中&#xff0c;Swagger可以帮助后端开发人员快速创建和定义RESTf…

电传动无杆飞机牵引车交付用户

自2019年起&#xff0c;我们计划做电传动控制&#xff0c;先后做了电传动水泥搅拌罐车罐体控制&#xff08;国内首创&#xff09;&#xff0c;初步理解了电机控制的特点。 20-21年接着做了10t飞机牵引车控制&#xff0c;还是电液控制联合的&#xff0c;把越野叉车的行驶控制方…