拯救行动(BFS)
公主被恶人抓走,被关押在牢房的某个地方。牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。
英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是 "骑士到达了公主所在的位置"。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。
现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要 11 个单位时间,杀死一个守卫需要花费额外的 11 个单位时间。同时假设骑士足够强壮,有能力杀死所有的守卫。
给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,请你计算拯救行动成功需要花费最短时间。
输入格式
1、两个整数代表 NN 和 M, (N, M \le 200)M,(N,M≤200).
2、随后 NN 行,每行有 MM 个字符。"@" 代表道路,"a" 代表公主,"r" 代表骑士,"x" 代表守卫, "#" 代表墙壁。
输出格式
如果拯救行动成功,输出一个整数,表示行动的最短时间。
如果不可能成功,输出 "Impossible"。
输入样例1:
7 8 #@#####@ #@a#@@r@ #@@#x@@@ @@#@@#@# #@@@##@@ @#@@@@@@ @@@@@@@@输出样例1:
13输入样例2:
13 40 @x@@##x@#x@x#xxxx##@#x@x@@#x#@#x#@@x@#@x xx###x@x#@@##xx@@@#@x@@#x@xxx@@#x@#x@@x@ #@x#@x#x#@@##@@x#@xx#xxx@@x##@@@#@x@@x@x @##x@@@x#xx#@@#xxxx#@@x@x@#@x@@@x@#@#x@# @#xxxxx##@@x##x@xxx@@#x@x####@@@x#x##@#@ #xxx#@#x##xxxx@@#xx@@@x@xxx#@#xxx@x##### #x@xxxx#@x@@@@##@x#xx#xxx@#xx#@#####x#@x xx##@#@x##x##x#@x#@a#xx@##@#@##xx@#@@x@x x#x#@x@#x#@##@xrx@x#xxxx@##x##xx#@#x@xx@ #x@@#@###x##x@x#@@#@@x@x@@xx@@@@##@@x@@x x#xx@x###@xxx#@#x#@@###@#@##@x#@x@#@@#@@ #@#x@x#x#x###@x@@xxx####x@x##@x####xx#@x #x#@x#x######@@#x@#xxxx#xx@@@#xx#x#####@输出样例2:
7
解题思路:因为要求到达‘a'的最小值,所以求每一步时都用前一步的最小值来求,那么就需要使用优先队列来做了。
参考答案:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N=2005;
typedef pair<int,int> PII;
char a[N][N];
int n,m,sx,sy,dist[N][N];
struct node{int x,y,s;friend bool operator<(node a,node b){return a.s>b.s;}
}cur,nex;
bool st[N][N];
priority_queue<node> q;
void BFS()
{st[sx][sy]=true;cur={sx,sy,0};q.push(cur);int ne[4][2]={{0,1},{0,-1},{1,0},{-1,0}};while(q.size()){auto it=q.top();q.pop();int x=it.x,y=it.y, s=it.s;for(int i=0;i<=3;i++){int tx=x+ne[i][0],ty=y+ne[i][1];if(a[tx][ty]=='a'){cout<<s+1;return ;}if(tx>=0&&tx<n&&ty>=0&&ty<m&&a[tx][ty]!='#'&&!st[tx][ty]){st[tx][ty]=true;if(a[tx][ty]=='x'){cur={tx,ty,s+2};q.push(cur);}if(a[tx][ty]=='@'){cur={tx,ty,s+1};q.push(cur);}}}}cout<<"Impossible";
}
int main()
{cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>a[i][j];if(a[i][j]=='r') sx=i,sy=j;} BFS();return 0;
}
相关文章:
拯救行动(BFS)
公主被恶人抓走,被关押在牢房的某个地方。牢房用 N \times M (N, M \le 200)NM(N,M≤200) 的矩阵来表示。矩阵中的每项可以代表道路()、墙壁(#)、和守卫(x)。 英勇的骑士(r…...
985硕的4家大厂实习与校招经历专题分享(part2)
我的个人经历: 985硕士24届毕业生,实验室方向:CV深度学习 就业:工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 (只看大厂,面试…...
【NR技术】 3GPP支持无人机的关键技术以及场景
1 背景 人们对使用蜂窝连接来支持无人机系统(UAS)的兴趣浓厚,3GPP生态系统为UAS的运行提供了极好的好处。无处不在的覆盖范围、高可靠性和QoS、强大的安全性和无缝移动性是支持UAS指挥和控制功能的关键因素。与此同时,监管机构正在调查安全和性能标准以及…...
【译】WordPress Bricks主题安全漏洞曝光,25,000个安装受影响
WordPress的Bricks主题存在一个严重的安全漏洞,恶意威胁行为者正在积极利用该漏洞在易受攻击的安装上运行任意PHP代码。 该漏洞被跟踪为CVE-2024-25600(CVSS评分:9.8),使未经身份验证的攻击者能够实现远程代码执行。它…...
【C++ 23种设计模式】
C 23种设计模式 ■ 创建型模式(5种)■ 工厂模式■ 抽象工厂模式■ 原型模式■ 单例模式■ 第一种:单线程(懒汉)■ 第二种:多线程(互斥量实现锁懒汉)■ 第三种:多线程(const static饿…...
亚信安慧AntDB:企业数据管理的明日之星
在信息科技飞速发展的时代,亚信科技AntDB团队提出了一项颠覆性的“超融合”理念,旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力,充分发挥分布式数据库引擎的架构优势&…...
Android Gradle开发与应用 (三) : Groovy语法概念与闭包
1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言,与Java是完全兼容,除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机(JVM)上,也可以被编译成Java字节码文件。 以下是Groovy的一些…...
Android 14 设置锁屏为NONE后开启双卡PIN锁,重启设备后,输完卡1的PIN码就进入了安卓界面,未提示输入卡2的PIN码
一.问题背景 目前在多个Android14平台发现开启双卡PIN码并且关闭屏幕锁的情况下,第二个PIN码锁输入弹框不能弹出问题,导致第二个卡不能注网。 如下是未修改前重启后解锁卡1PIN码的状态 可以看出卡2不能正常使用 二.何处关闭了卡2的PIN锁? 1.添加日志 首先在KeyguardSecu…...
2024 GoLand激活,分享几个GoLand激活的方案
文章目录 GoLand公司简介我这边使用GoLand的理由GoLand 最新变化GoLand 2023.3 最新变化AI Assistant 正式版GoLand 中的 AI Assistant:_Rename_(重命名)GoLand 中的 AI Assistant:_Write documentation_(编写文档&…...
linux中对信号的认识
信号的概念与相关知识认识 信号是向目标进程发送消息通知的的一种机制。 信号可以以异步的方式发送给进程,也就是说,进程无需主动等待,而是在任何时间都可以接收到信号。 信号的种类 用kill-l命令查看系统定义的信号列表: 前台…...
【万题详解】P1048 [NOIP2005 普及组] 采药
题目描述 链接——题目在这里!!! 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草…...
Golang基于Redis bitmap实现布隆过滤器(完结版)
Golang基于Redis bitmap实现布隆过滤器(完结版) 为了防止黑客恶意刷接口(请求压根不存在的数据),目前通常有以下几种做法: 限制IP(限流)Redis缓存不存在的key布隆过滤器挡在Redis前 …...
Java基础-内部类
内部类 引言内部类的共性成员内部类静态内部类非静态内部类 局部内部类匿名内部类内部类的使用场景和好处 引言 Java不仅可以定义变量和方法,还可以定义类. 内部类允许你把一些逻辑相关的类组织在一起,并可以控制内部中类的可见性. 这么看来,内部类就像是代码一种隐藏机制:将类…...
设计模式-行为型模式-职责链模式
在软件系统运行时,对象并不是孤立存在的,它们可以通过相互通信协作完成某些功能,一个对象在运行时也将影响到其他对象的运行。行为型模式(Behavioral Pattern)关注系统中对象之间的交互,研究系统在运行时对…...
代码随想录算法训练营第四十天|LeetCode343 整数拆分、LeetCode96 不同的二叉搜索树
343.整数拆分 思路:确定dp数组以及下标的含义 dp[i]代表 i可以被拆分后的最大乘积。确定递推公式,假如拆成连个数,dp[i] j*(i-j),拆成两个数以上,dp[i]j*dp[i-j],j的范围为1到i-1.dp[i]找到所有情况的最大值。初始化…...
接口自动化测试用例如何设计
说到自动化测试,或者说接口自动化测试,多数人的第一反应是该用什么工具,比如:Python Requests、Java HttpClient、Apifox、MeterSphere、自研的自动化平台等。大家似乎更关注的是哪个工具更优秀,甚至出现“ 做平台的 &…...
弱电综合布线:连接现代生活的纽带
在当今信息化快速发展的时代,弱电网络布线作为信息传输的重要基础设施,其作用日益凸显。它不仅保障了数据的高效流通,还确保了通信的稳定性。从商业大厦到教育机构,从政府机关到医院急救中心,再到我们居住的社区&#…...
Java零基础 - 数组的定义和声明
哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…...
CSS补充(下),弹性布局(上)
高级选择器 1.兄弟选择器 2.同时满足 div.bg{background-color: red;}p.bg{background-color: green;}spam.bg{background-color: blue;}注:选择器中间没有空格,有明确标识的选择器写在后面 3.各种伪类的应用 3.1作为第几个子元素 选择器:nth-child…...
图数据库 之 Neo4j - 应用场景4 - 反洗钱(9)
原理 Neo4j图数据库可以用于构建和分析数据之间的关系。它使用节点和关系来表示数据,并提供实时查询能力。通过使用Neo4j,可以将大量的交易数据导入图数据库,并通过查询和分析图结构来发现洗钱行为中的模式和关联。 案例分析 假设有一家转账服务公司,有以下交易数据,每个…...
新的契约:人机协作的设计原则
一开始我觉得这个概念有点抽象,但读完后发现,它其实回答的是一个很现实的问题: 当 AI 不只是回答问题,而是开始自己规划、执行任务时,人和 AI 应该怎么分工? 这篇文章,我想从初学者角度&#…...
螺旋模型深入分析和总结
螺旋模型(Spiral Model)是由 Barry Boehm 于 1986 年提出的一种风险驱动的软件过程模型。它结合了瀑布模型的系统性与原型模型的迭代性,并引入了风险分析这一关键活动。螺旋模型特别适用于大型、复杂、高风险的软件项目。 一、核心思想 螺旋模型将软件开发过程表示为一个螺…...
Stable Diffusion 1.5+Leather Dress Collection保姆级教程:零基础生成高质感皮衣图
Stable Diffusion 1.5Leather Dress Collection保姆级教程:零基础生成高质感皮衣图 你是不是也想用AI画出那种质感超棒、风格独特的皮衣时尚图?看到别人生成的皮衣模特图,细节丰富,光影真实,自己却不知道从哪里开始&a…...
从扩频时钟到弹性缓存:一张图看懂PCIe是如何‘容忍’时钟偏差,保证数据不丢的
从水流模型到数据同步:图解PCIe时钟偏差补偿机制 想象一下城市供水系统中两个不同步的水泵——一个抽水快,一个抽水慢。如果没有调节装置,要么水管爆裂,要么用户断水。PCIe总线面临的时钟同步挑战与此惊人相似。本文将用生活化的水…...
从Simulink仿真到DSP28335硬件部署:我的PID闭环调试踩坑记录
从Simulink仿真到DSP28335硬件部署:我的PID闭环调试踩坑记录 在嵌入式控制系统的开发过程中,从仿真模型到硬件实现往往是一条充满挑战的道路。作为一名长期从事电机控制开发的工程师,我曾多次经历从Simulink的理想仿真环境到DSP28335实际硬件…...
芯片逆向工程与专利分析的技术实践与法律风险
1. 芯片逆向工程的行业现状与技术痛点在半导体行业摸爬滚打十几年,我见过太多公司一边公开否认、一边私下大搞逆向工程的"行业潜规则"。这就像厨艺界的秘密配方破解——大家都说尊重原创,但谁不想知道对手的独门秘方?逆向工程本质上…...
记录一次长时间未提交事务造成的慢SQL
目录 问题描述 问题分析 1、了解前后信息 2、分析执行计划 3、分析生产环境系统负载 4、分析数据库性能 5、初步锁定根因为长时间未提交事务导致 6、最终根因定位 7、原理分析 问题描述: 开发反馈执行某条select语句的时候,生产环境和测试环境耗时相差非…...
GeoAI 的4大核心技术如何重塑行业应用
1. 图像分类:从像素到决策的智能之眼 我第一次接触GeoAI图像分类技术是在一个农业监测项目中。当时需要从无人机拍摄的农田图像中自动识别作物类型,传统方法需要人工标注每张图片,效率极低。而当我用上基于卷积神经网络(CNN&#…...
多智能体推理与协作的薄环节优化
摘要基于大语言模型的多智能体框架通过多角色协作来解决复杂的推理任务。然而,现有方法往往存在推理不稳定的问题:单个智能体的错误在协作过程中被放大,从而损害整体性能。当前研究主要侧重于增强高能力智能体或抑制不可靠的输出以提升框架有…...
海思3516a OSD水印进阶:动态更新、多区域叠加与性能优化心得
海思3516a OSD水印进阶:动态更新、多区域叠加与性能优化实战 在嵌入式视频处理领域,OSD(On-Screen Display)水印功能早已超越简单的静态文字叠加,成为智能设备中不可或缺的信息交互层。当我们面对安防摄像头需要实时更…...
