首页 > 其他分享 >【SSL 1823】消灭怪物(非传统BFS)

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

时间:2024-10-23 23:21:55浏览次数:1  
标签:yy bfs int 1823 BFS SSL xx 怪物 true

题目大意

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

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

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

输入格式

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

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

输出格式

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

输入样例

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

输出样例

1

基本思路

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

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

所以我们要介绍一个新东西,双端队列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;
}

标签:yy,bfs,int,1823,BFS,SSL,xx,怪物,true
From: https://www.cnblogs.com/drlai/p/18498579

相关文章

  • OpenSSL异步模式流程梳理
    源码来源于OpenSSLMasterCommitIDd550d2aae531c6fa2e10b1a30d2acdf373663889。总览核心入口函数为ssl_start_async_job,以SSL_do_handshake为入口举例分析,同时通过标注步骤【1~N】,来明确阅读的顺序。步骤【1】到步骤【18】为一个阶段步骤【19】到步骤【23】为一个阶......
  • 什么是 OV SSL 证书以及它如何工作?
    经营在线业务首先要有全面的网络安全实践。您可能提供最好的产品或服务,但如果您无法保护客户的敏感数据,那么一切都将化为泡影。这就是组织验证(OV)SSL证书的作用所在。但是,OVSSL证书是什么?为什么它如此重要?本文将提供答案。了解OVSSL如何提高您网站的可信度、保护敏感数据......
  • 使用OpenSSl库实现AES-GCM-128算法(C语言)
    在C语言中使用OpenSSL库实现AES-GCM-128算法,并生成GMAC(GaloisMessageAuthenticationCode)消息认证码,通过以下步骤完成:初始化加密环境:创建一个EVP_CIPHER_CTX结构体,用于存储加密过程中的所有必要信息。设置加密算法:指定使用AES-GCM模式,以及密钥和IV(初始化向量)。处理附加认证......
  • DFS与BFS
    图论:一、图中DFS与BFS数和图的存储方式:m与n^2一个级别属于稠密图,m与n一个级别则属于稀疏图,可以从题目中明显看出来稠密图:邻接矩阵稀疏图:邻接表#include<bits/stdc++.h>usingnamespacestd;constintN=100100;intm,n;inth[N],e[N],ne[N],idx;intq[N],d[N];bool......
  • 如何在服务器上安装SSL证书?
    在服务器上安装SSL证书的步骤可能会根据你使用的Web服务器软件(如Apache、Nginx、IIS等)以及操作系统(Linux、Windows等)的不同而有所差异。下面是一个通用的安装步骤概述,以及针对几种常见Web服务器的具体指导。通用安装步骤获取SSL证书:从证书颁发机构(CA)获取你的SSL证书文件。......
  • Windows下给Visual Studio添加OpenSSL
    一、安装OpenSSL1.下载OpenSSLWin32/Win64OpenSSLInstallerforWindows-ShiningLightProductions可以下载已经编译好的包含lib和include文件的安装包有Win32和Win64可选,这里的位数指的是你使用OpenSSL开发出来的软件的位数版本,而不是你计算机的位数。注意,不要下载......
  • Linux(银河麒麟)升级openssh和openssl
    Linux升级openssh升级包下载地址:openssh:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gzopenssl:https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gzzlib:https://zlib.net/fossils/zlib-1.3.tar.gz备份原......
  • 【Azure Developer】System.Net.WebException: The request was aborted: Could not c
    问题描述在Azure中,使用操作系统为WinServer2019和WinServer2012的虚拟机,同样代码可以链接同一个AzureServiceBus。Win2019成功运行,但是在Win2012上报错:CouldnotcreateSSL/TLSsecurechannel. 问题解答WinServer2012默认不支持TLS1.2,可以通过安装 Update3140245 ......
  • 【Azure Developer】System.Net.WebException: The request was aborted: Could not c
    问题描述在Azure中,使用操作系统为WinServer2019和WinServer2012的虚拟机,同样代码可以链接同一个AzureServiceBus。Win2019成功运行,但是在Win2012上报错:CouldnotcreateSSL/TLSsecurechannel. 问题解答WinServer2012默认不支持TLS1.2,可以通过安装 Update314......
  • 使用 acme.sh 生成免费 90 天的 SSL 泛域名证书
    使用acme.sh生成免费90天的SSL泛域名证书使用acme.sh生成免费90天的SSL泛域名证书原创西瓜皮codebox代码助手 2024年10月16日08:00英国听全文图片 acms.sh是Github上开源的一款SSL证书申请工具,该工具安装配置完成后可帮我们申请免费SSL证书,并通过......