[BFS广搜]迷阵

描述

小Z每年都会为程设课出一道大作业,荼毒学弟学妹,可谓罪大恶极不可饶恕。

终于有一天,神明也看不下去了,他唤醒上古四大神兽,决定围困小Z,威慑一番。

于是,在小Z下一次醒来时,他便发现自己已然身处不知名的所在,抬眼所见,只有滚滚迷雾席卷而来,雾霭深处还隐隐约约闪着雷光。

低头一看,地上有一红漆木盒,上书四个大字“求生之道”,打开一看,竟是一台电脑。

电脑上空荡荡的,只有三个文件,一个是 Visual Studio 的安装包,一个是 README.txt,还有一个是 map.png。

小Z想都没想就开始安装 VS,在漫长的等待中,他打开了 README.txt:

“汝罪大恶极,故略施薄惩。此乃四象迷阵,有神兽镇守,踏错一步,险象环生。如欲得生,须观 map.png,寻得最短出路。”
 



迷阵是 m 行 n 列的格子矩阵,行、列从 1 开始数。小Z出生在左上角,也就是第 1 行,第 1 列的格子,迷阵的出口在第 m 行,第 n 列。

迷阵中有三种格子:

1. 空格子,以英文句点'.'记。出生点和出口都是空格子。
2. 墙,以井号'#'记。小Z无法移动到墙上。
3. 陷阱,以星号'*'记。小Z移动到陷阱的瞬间会受到来自上古神兽的 1 点伤害(生命 - 1),但是离开陷阱的瞬间不会再受到伤害。

小Z的生命有 H 点,当生命到 0 的瞬间他就会被传送回出生点。

小Z的每次行动是向上下左右的四个方向之一移动一格。不能移动出界,不能移动到墙上,但是可以移动到陷阱上。

小Z需要在短短3个小时内写出程序,算出自己最少要走多少步才能走到出口。

但凡迷阵,必有生门。题目保证必定存在一条路径使得小Z能够走到出口。

输入

第一行是一个整数 T,表示输入包含 T 组数据,分别是不同的平行时空下小Z所处的迷阵。

对于每组数据,第一行包括三个整数:m(2 <= m <= 255)、n(2 <= n <= 255)、H(1 <= H <= 5)。

接下来 m 行,每行是一个由符号组成的长度为 n 的字符串,第 i 行的第 j 个字符表示矩阵中第 i 行第 j 列的格子的类型。

题目保证出生点和出口(左上角和右下角)都是空格子。

输出

对于每组数据,你需要输出一行一个正整数,表示小Z在这个迷阵中最少要走多少步才能走到出口。

题目保证小Z一定能走到出口。

样例输入

2
2 2 3
.*
#.
5 5 3
.....
****.
.....
.****
.....

样例输出

2
8
解题分析

很经典的广搜题加上了一定的限制条件,所以我们也相应地给visited数组多加上一点维度来判断是否经过。由于多次吃亏,我们还是决定在放入数组的那个时候直接标记visited,避免扩展无用节点导致memory limited exceed!!然后,如果生命值归0了,说明这个路径是不行的,我们也不用继续放进队列扩展了,然后如果说现在的步数已经比答案要更大了,也没有必要放进去,这种减枝是很有效的。

代码实现
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
int m,n,H;
char maze[260][260];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
bool visited[260][260][6];struct Node{int x,y,H;int step;Node(int a=0,int b=0,int c=0,int d=0) : x(a),y(b),H(c),step(d) {}
};int main(){int T;scanf("%d",&T);while(T--){memset(visited,0,sizeof(visited));scanf("%d%d%d",&m,&n,&H);for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){scanf(" %c",&maze[i][j]);}int ans=1e9;queue<Node> q;q.push({1,1,H,0});while(!q.empty()){Node tmp=q.front();q.pop();if(tmp.x==m && tmp.y==n){ans=min(ans,tmp.step);break;}for(int i=0;i<4;i++){int x1=tmp.x+dx[i];int y1=tmp.y+dy[i];if(x1>=1 && x1<=m && y1>=1 && y1<=n  && maze[x1][y1]!='#'){int tmph=tmp.H;if(maze[x1][y1]=='*') tmph-=1;if(tmph && visited[x1][y1][tmph]==0 && tmp.step+1<ans){q.push({x1,y1,tmph,tmp.step+1});visited[x1][y1][tmph]=1;}} }}printf("%d\n",ans);}return 0;
}

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

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

相关文章

SpringBoot+Maven项目的配置构建

文章目录 1、application.properties2、pom.xml 1、application.properties 也可使用yml yaml #静态资源 spring.mvc.static-path-pattern/images/** #上传文件大小设置 spring.http.multipart.max-file-size10MB spring.http.multipart.max-request-size10MBspring.mvc.path…

什么是交错计算,有哪些场景会出现交错计算

交错计算指的是在编程技术中&#xff0c;多个进程或任务以交替或交织的方式执行&#xff0c;共享资源并轮流取得进展。这种做法对于提高系统效率特别有用&#xff0c;确保没有单一资源&#xff08;如CPU核心&#xff09;在有其他任务可以使用时保持空闲。 在计算领域&#xff…

Sui的Fastcrypto加密库刷新速度记录

Sui使用的加密库Fastcrypto打破了许多速度记录&#xff0c;Mysten Labs在基准测试和安全分析中的工作修复了许多安全漏洞&#xff0c;同时通过识别新的优化技巧为创新开辟了道路。 最近在伦敦帝国理工学院举行的国际性能工程会议&#xff08;ICPE&#xff09;基准测试研讨会上…

【LeetCode:394. 字符串解码 + 栈 | 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

C# —— while循环语句

作用 让顺序执行的代码 可以停下来 循环执行某一代码块 // 条件分支语句: 让代码产生分支 进行执行 // 循环语句 : 让代码可以重复执行 语法 while循环 while (bool值) { 循环体(条件满足时执行的代码块) …

智慧路灯:照亮未来城市的智慧之光

智慧路灯&#xff0c;顾名思义&#xff0c;是在传统路灯基础上集成物联网、大数据、云计算、人工智能等现代信息技术的新型照明系统。它不仅提供节能高效的照明服务&#xff0c;更成为城市信息采集、传输、发布的载体&#xff0c;以及多种增值服务的平台。 核心功能与技术创新 …

聊聊 Mybatis 动态 SQL

这篇文章&#xff0c;我们聊聊 Mybatis 动态 SQL &#xff0c;以及我对于编程技巧的几点思考 &#xff0c;希望对大家有所启发。 1 什么是 Mybatis 动态SQL 如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼…

如何设置文件夹密码?文件夹加密如何操作!分享4款安全加密软件!

在数字化时代&#xff0c;数据安全显得尤为重要。设置文件夹密码和加密操作是保护个人或企业数据不被非法访问的有效手段。本文将为您详细介绍如何设置文件夹密码和加密操作&#xff0c;并分享四款安全加密软件&#xff0c;助您轻松提升数据安全防护能力。 一、如何设置文件夹/…

工作人员能从轧钢测径仪上获取哪些有效信息?

轧钢测径仪安装在轧钢生产线中&#xff0c;无论是热轧还是冷轧&#xff0c;都不能阻挡测径仪的高速无损高精检测。它采用八轴测量系统&#xff0c;能全方位检测外径尺寸&#xff0c;并且配备了测控软件系统&#xff0c;为工作人员提供更加丰富的产线信息。 普通轧钢测径仪能获…

Playwright 入门教程

1. 环境说明 操作系统&#xff1a;macOS 11.7Python&#xff1a;3.10.6 2. 安装 2.1. 创建测试环境 mkdir playwright-demo cd playwright-demo/ python3 -m venv venv # 安装 Pytest 插件 venv/bin/pip3 install pytest-playwright # 安装需要的浏览器 venv/bin/playwrigh…

DLP数据防泄密系统有什么功能?四款特别好用的DLP仿泄密系统

DLP&#xff08;Data Loss Prevention&#xff0c;数据丢失防护&#xff09;系统是一类专门用于保护组织内部数据不被非法访问、泄露或误用的安全解决方案。 这类系统通常具备以下关键功能&#xff1a; 1.数据识别与分类&#xff1a;自动发现并分类存储在网络、终端和云环境中…

24计算机应届生的活路是什么

不够大胆❗ 很多小伙伴在找工作时觉得自己没有竞争力&#xff0c;很没有自信&#xff0c;以至于很害怕找工作面试&#xff0c;被人否定的感觉很不好受。 其实很多工作并没有想象中的高大上&#xff0c;不要害怕&#xff0c;计算机就业的方向是真的广&#xff0c;不要走窄了&…

朋友圈新功能:实现定时发圈,自动跟圈

1.多号同时发圈 可以选择多个号同时发圈&#xff0c;提高工作效率。 2.定时发布 可以一次性设置完很多天的朋友圈&#xff0c;选好发送时间就可以解放双手。 3.一键转发 点击转发&#xff0c;可直接跳转到编辑页面。无需复制粘贴。 4.自动转发&#xff08;跟圈&#xff09; …

机能学实验通过ZL-620C一体化信息化生物信号采集系统具体呈现

ZL-621大屏教学试教系统为了实施机能学实验的教学改革&#xff0c;大力减轻教师的实验教学负担&#xff0c;主要功能电子白板&#xff0c;同步教学、控制、过程仿真、虚拟现实、三维动画、管理、音视频广播、PPT教材等于一体&#xff0c;大屏教学试教系统并能同时实现屏幕监视和…

湖北文理学院2024年成人高等继续教育招生简章

湖北文理学院&#xff0c;作为一所历史悠久、底蕴深厚的学府&#xff0c;始终致力于为社会各界培养具备高素质、专业技能和创新精神的优秀人才。在成人高等继续教育领域&#xff0c;湖北文理学院更是凭借其卓越的教学质量和丰富的教育资源&#xff0c;吸引了众多有志于提升自身…

Cesium入门学习(一)

下载cesium源代码 安装依赖 npm install注册账户&#xff0c;申请一个token 没有这个token&#xff0c;会导致地图中只能看到一个宇宙&#xff0c;没有办法看到地球 cesium的官网&#xff1a;cesium官网 替换token 替换对应位置的token 启动 运行 npm run build npm r…

新手小白如何进行反编译操作

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;上一期给大家讲了反编译的重要作用&#xff0c;这一期带大家一起了解一下新手小白盖如何进行反编译操作&#xff0c;这个操作对于学习软件工作原理、进行安全审计、软件兼容性修改等方面非常有用。作为一…

72. UE5 RPG 实现召唤技能数量的限制,并优化技能相关

在上一篇文章里&#xff0c;我们实现了召唤技能&#xff0c;并且能够无限的召唤。所以&#xff0c;这属于一个bug&#xff0c;我们不能无限制的去召唤&#xff0c;这会影响游戏的体验。所以&#xff0c;在这篇里面&#xff0c;我们实现一下对召唤物数量的限制&#xff0c;并优化…

华为---- RIP路由协议基本配置

08、RIP 8.1 RIP路由协议基本配置 8.1.1 原理概述 RIP(Routing Information Protocol,路由协议)作为最早的距离矢量IP路由协议&#xff0c;也是最先得到广泛使用的一种路由协议&#xff0c;采用了Bellman-Ford算法&#xff0c;其最大的特点就是配置简单。 RIP协议要求网络中…