拯救行动 —— bfs + 优先队列

Java实现 计蒜客 拯救行动 拯救行动 公主被恶人抓走,被关押在牢房的某个地方。牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是 “骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 ... 阅读详情

在这里插入图片描述在这里插入图片描述样例输入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
思路:刚开始我对‘x’与‘@’处理的区别就是一个的深度多加1,测试后只能通过几组数据,其实我忽略一个问题就是:这样做出来的最短路径未必花费最短时间,比如:
@@@@@
rxxxxa
这个的最短路径需要花费7个单位时间,而显然我们只需花费6个单位时间就可以拯救公主。
还是需要借助数据结构优先队列解决。

import java.util.PriorityQueue;
import java.util.Scanner;

public class Main{
	static int [] dx =  {-1,0,0,1};
	static int [] dy = {0,-1,1,0};
	static int step = 1;
	static boolean flag = false;
	public static void main(String []args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		sc.nextLine();
		char [][]graph = new char[n][];
		int [][]vis = new int[n][m];
		for(int i=0;i<n;i++){
			graph[i] = sc.nextLine().toCharArray();
		}
		
		//创建队列
		PriorityQueue<Node> queue = new PriorityQueue<>();
		
		 for(int i=0;i<n;i++){
			 for(int j=0;j<m;j++){
			    if(graph[i][j] == 'r')  queue.add(new Node(i,j,0));
			 }
		 }
		
		 while(!queue.isEmpty()){
			 Node poll = queue.poll();
			 int x = poll.i;
			 int y = poll.j;
			 int deep = poll.depth;
			 vis[x][y] = 1;
			 
			 if(graph[x][y] == 'a'){
				 flag = true;
				 step = poll.depth;
				 break;
			 }
			 
			 for(int u=0;u<4;u++){
	    			int tx = x+dx[u] , ty = y+dy[u];    		
	    		  if(tx >=0 && tx < n  && ty>=0 && ty<m && graph[tx][ty] != '#' && vis[tx][ty] == 0){
	    			  vis[tx][ty] = 1;
	 				 if(graph[tx][ty] == 'x')  queue.add(new Node(tx,ty,deep+2));
	 				 else  queue.add(new Node(tx,ty,deep+1)); 
	    	       }
	    		}
		     }
		   if(flag == true) System.out.print(step);
		   else System.out.print("Impossible");
       }
	
	//将坐标与深度封装为一个类,并实现比较接口Comparable
	static class Node implements Comparable<Node>{
		int i;
		int j;
		int depth;
		
		public Node(int i,int j,int depth){
			this.i = i;
			this.j = j;
			this.depth = depth;  
		}
		
		//按照点的深度从小到大排序
		public int compareTo(Node o) {
			int x = this.depth - o.depth;
			if(x == 0)  return  this.depth - o.depth;
			else  return x;
		}
	}
}
27、自闭症儿童治疗与玩具设计研究 本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。 阅读详情

相关推荐

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 474

拯救行动(BFS)

牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示。现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要 11 个单位时间,杀死一个守卫需要花费额外的 11 个单位时间。"@" 代表道路,"a" 代表公主,"r" 代表骑士,"x" 代表守卫, "#" 代表墙壁。解题思路:因为要求到达‘a'的最小值,所以求每一步时都用前一步的最小值来求,那么就需要使用优先队列来做了。给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,请你计算拯救行动成功需要花费最短时间。

2302_79372568的博客 714

阿里云网络架构设计

背景 一个企业上云,首先要考虑整个网络的规划,涉及到云上和云下的网络规划,云上VPC的规划,云上不同地域VPC的互通,云上可用区的选择等等,所以一定要提前规划好整体的网络架构,现在阿里云云上的虚拟化网络解决方案已经完全转向 了云企业网,所以所有使用阿里云的企业客户多多少少都会使用阿里云的CEN 支撑自己的业务。 云企业网介绍 云企业网(Cloud Enterprise Network)是承载在阿里云提供的高性能、低延迟的私有全球网络上的一张高可用网络。 IDC专线接入CEN 首先面临的是云上和云下打通,那么

修电脑的码农 4838

拯救行动 【优先队列BFS】

公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 现假设骑士可以向上、下、左、右四个方向移动,每移动...

Code_U 1033

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2321

ios快捷指令进行钉钉打卡

首先 1、打开快捷指令 2、自动化 3、创建个人自动化-特定时间 4、添加操作-搜索“随机数” 5、最小值和最大值填充 6、添加操作-搜索“等待” 7、长按“1秒钟”,选择魔法变量,选择上一步的随机数 6、添加操作-搜索“钉钉” 7、选择钉钉-随便一个聊天窗口。 8、添加操作-搜索“等待”,这次将等待时间设为10秒 9、添加操作 “搜索天气” ,选择显示天气。 注意点: 1、此操作依赖于钉钉极速打卡,只是帮忙唤起钉钉。 2、保存自动化时有个运行前询问,务必关掉。 3、手机不能设

blaze_jack 5万+

********广度优先搜索*********

目录 BFS算法: 广度优先搜索算法 POJ 3278Catch That Cow 百练4116:拯救行动 BFS算法: 思路: 1.从初始状态S开始,利用规则,生成下一层的状态。 2.顺序检查下一层的所有状态,看是否出现目标状态G。 否则就对该层所有状态节点,分别利用规则。生成再下一层的所有状态节点。 3.继续按照上面思想生成下一层的所有状态节点,这样一层一层往下展...

LMengi000的博客 592

全面解析智能座舱芯片参数:高通 (SA8295)vs 联发科,真实案例一行行讲给你听!

使用场景推荐芯片中低端车型 + 1屏导航语音SA8155P / MT8628(性价比高)中控+副驾+仪表+全景影像SA8255P / MT8678(性能强)高阶自动驾驶+域控融合SA8295P(顶级安全+算力)

weixin_43199439的博客 2076

计蒜客-T1213-拯救行动--bfs+优先队列

题目链接:https://nanti.jisuanke.com/t/T1213 题目描述: 公主被恶人抓走,被关押在牢房的某个地方。牢房用N \times M (N, M \le 200)N×M(N,M≤200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是 "骑士到达了公主所在的位置"。...

好好学习。天天编程 630

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

使用CloudCompare编程实现点云添加随机噪声。

点云侠的博客 840

RKNN 端侧部署必看:YOLOv11 Pose 姿态估计模型转换与性能优化实战

随着人工智能技术在边缘计算领域的快速发展,姿态估计作为计算机视觉的重要分支,在智能监控、人机交互、体感游戏等场景中展现出巨大的应用潜力。本文深入研究了YOLOv11 Pose模型在Rockchip RKNN平台上的部署方案,从理论基础、模型转换、平台优化到实际部署进行了全面阐述。通过详细的技术分析和实验验证,证明了RKNN平台能够有效提升YOLOv11 Pose的推理性能,在RK3588硬件平台上实现了高达100 FPS的实时姿态检测,为边缘计算场景下的姿态估计应用提供了高效的解决方案。

m0_71589036的博客 183

优先队列下的bfs————拯救行动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 遇到有条件的,例如这一题,如一直打怪,时间肯定很长,所以我们尽量少打架 这时候就可以用优先队列,在放进队列是会自动排列 总结 值得注意的是,优先队列只有取队首元素不同。在优先队重载列中是用top,队列中则用的是front 另一个就是重载运算符,需要在定义我们结构体的时候就在其内部定义 friend b

qq_53770580的博客 966

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4210

POJ 4116:拯救行动(BFS+优先队列)

4116:拯救行动 总时间限制:  1000ms 内存限制:  65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M &lt;= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。  英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守...

qq_37618760的博客 1626

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

拯救行动——优先队列(BFS)

拯救行动 本人水平有限,仅供学习,如有发现错误,感谢指出。 题目链接:https://nanti.jisuanke.com/t/T1213 题目传送门(点我) 分析:要注意的是,由于杀死守卫会花费时间,朴素的BFS是不可取的,因为那样求出来的是最短路径所花费的时间,而我们要求的是花费的最短时间 BFS对地图的搜索是一层一层的扩展开的,维护一个队列,队列第一次加入的是走一步可以到的位置,然后将走一步可以到达的位置加入队列,再由这些节点进一步扩展。而我们现在是想找到一条耗时更短的路径,所以说,如果有多种情况

远赴山河万里的博客 715

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

BFS+优先队列解决POJ上的拯救行动问题

描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 现假设骑士可以向上、下、左、右四个方向...

ls8023yx的博客 608

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OpenJ_Bailian 4116 拯救计划(优先队列bfs)

Problem 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要1个单位时间,杀死一个守卫需要花费额外的1个单位时间。同时假设骑士足够强壮,有能力杀

Jacob0824的博客 440

OpenJudge - 拯救行动(BFS+剪枝|优先队列)

题目链接:http://bailian.openjudge.cn/practice/4116?lang=en_US 总时间限制:1000ms 内存限制:65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯...

ityanger的技术栈 3505

计蒜客拯救行动(bfs+优先队列)

if (dis[nx][ny] == 0 || next_time < dis[nx][ny]) { // 如果新位置未访问过或者到达新位置的时间更短。if (m[tx][ty] == 'a') { // 如果当前节点是目标节点。if (m[i][j] == 'r') { // 找到起点坐标。cout << t;

2203_75453471的博客 430

百练 OpenJudge 拯救行动 (优先队列+BFS) 详细注释

描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 现假设骑士可以向上、下、左、右四个方向移...

qq_42489190的博客 441

HDU [ 拯救天使 ]——优先队列(结构体)+BFS

HDU——拯救天使:Problem DescriptionAngel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M &amp;lt;= 200) matrix. There are WALLs, ROADs, and GUARDs in the...

又菜又爱玩 1778

ACM记忆化DFS与基于优先队列的BFS

那么就要。

JUSTINLEECEO的博客 866

计蒜客 T-1213-拯救行动(bfs+优先队列)

拯救行动 题目描述: 现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要 1 个单位时间,杀死一个守卫需要花费额外的 1 个单位时间。同时假设骑士足够强壮,有能力杀死所有的守卫。 给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,请你计算拯救行动成功需要花费最短时间。 输入格式 1、两个整数代表 N 和 M, (N,M≤200). 2、随后 N 行,每行有 M 个字符。"@" 代表道路,“a” 代表公主,“r” 代表骑士,“x” 代表守卫, “#” 代表墙壁。 输出格式 如果拯救行动成功,输出一个整

weixin_45102820的博客 581

OpenJ_Bailian - 4116拯救行动(bfs+优先队列)

4116:拯救行动 查看 提交 统计 提示 提问 总时间限制:  1000ms   内存限制:  65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M &lt;= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。  英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置...

暖心的博客 677

拯救计划 计蒜客--1213 bfs+优先队列

公主被恶人抓走,被关押在牢房的某个地方。牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。 英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是 "骑士到达了公主所在的位置"。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。 ———————————————— 版权声明:本文为优快云博主「好好学习。天天编程」的原创文章,遵循CC 4.0 BY-

二进制宇宙的博客 301

百练 4130 Saving Tang Monk [BFS+优先队列+状态压缩]

百练题目地址 判重3个状态就够了 位置+钥匙 除了#位置,其他位置都可以经过多次 注意钥匙数可以为零 因为打蛇要time+2,所以用优先队列 蛇的数量 #include #include #include #include #include #include #include using namespace std; const int maxn=100+5; int N,K,vis[

BRCOCOLI的博客 1291
上一篇: 仙岛求药 —— dfs 与 bfs求解
下一篇: char[ ]数组与String类型的互换
Ssssun_369
博客等级 码龄9年 35粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值