【HRBUST - 1621】迷宫问题II (bfs)

题干:

小z身处在一个迷宫中,小z每分钟可以走到上下左右四个方向的相邻格之一。迷宫中有一些墙和障碍物。
同时迷宫中也有一些怪兽,当小z碰到任意一个怪兽时,小z需要将怪兽消灭掉才可以离开此方格。但消灭
怪兽会花费一定的时间。现在小z想知道走出迷宫需要花费的最少时间。

Input

输入第一行为组数T(T<=10)。

对于每组数据第一行为两个整数R和C(1<=R,C<=200)。以下R行每行有C个字符,即迷宫地图。

其中"#"代表墙和障碍物,"."表示空地,[1~9]的数字代表此处有怪兽以及消灭此处的怪兽需要的时间.

"Z"表示小z的起始位置,"W"表示迷宫出口。

对于每组数据保证起始位置和迷宫出口唯一。

Output

对于每组数据,输出走出迷宫的最短时间(单位:分钟)。如果无法走出迷宫则输出"IMPOSSIBLE"。

Sample Input

2
3 4
.Z..
.234
#.W.
4 4
Z.1.
.32.
##4.
W#..

Sample Output

5
IMPOSSIBLE

Hint

解题报告:

     优先队列搞一波pq,如果是普通的bfs,那么队列即可,因为队列就能保证取出来的Node结构体的t是最小值,但是这题不一样,所以需要pq。刚开始写的时候wa了好几发最后发现是main函数中那个双层循环的内层循环写成了for(int j=i; j<=m; j++)、、、我也是醉了好像不止第一次错在这里了、、、

AC代码:

#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
struct Node {int x,y;int t;Node(){}Node(int x,int y,int t):x(x),y(y),t(t){} bool operator<(const Node b) const{return t > b.t;}
};
int n,m;
int nx[4]={0,1,0,-1};
int ny[4]={1,0,-1,0};
bool vis[205][205];
char maze[205][205];
int bfs(int sx,int sy) {priority_queue<Node> pq;pq.push(Node(sx,sy,0));Node cur;int tx,ty;while(pq.size()) {cur=pq.top();pq.pop();		for(int k = 0; k<4; k++) {tx = cur.x + nx[k];ty = cur.y + ny[k];if(maze[tx][ty] == '#' || vis[tx][ty] || tx < 1 || tx > n || ty < 1 || ty > m) continue;vis[tx][ty]=1;if(maze[tx][ty] == 'W') return cur.t + 1;else if(maze[tx][ty] == '.') pq.push(Node(tx,ty,cur.t+1));else pq.push(Node(tx,ty,cur.t + 1 + maze[tx][ty] - '0'));}}return -1;}
int main()
{int t,sx,sy;cin>>t;while(t--) {scanf("%d%d",&n,&m);memset(vis,0,sizeof vis);for(int i = 1; i<=n; i++) {scanf("%s",maze[i]+1);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == 'Z') {sx=i,sy=j;break;}}}int ans = bfs(sx,sy);if(ans == -1) puts("IMPOSSIBLE");else printf("%d\n",ans);}return 0 ;
}

 

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

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

相关文章

Linux与Bash 编程——Linux文件处理命令-L1

目录&#xff1a; linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版&#xff1a;Linux与Windows比较&#xff1a;Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件&#xff1a;mobaxterm的使用&#xff1a;使用电脑命令行连接&#xff1a;sshd的…

4.Transfer Learning

Intro 这是深度学习第4课。 在本课程结束时&#xff0c;您将能够使用迁移学习为您的自定义目标构建高度准确的计算机视觉模型&#xff0c;即使您的数据相对较少。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(mPFq5KMxKVw, width800, height450) S…

Angular相关的有价值的问题集锦

001. Angular的三大核心概念是什么&#xff1f; 答&#xff1a;组件化、模块化和路由&#xff08;Component、NgModule、Router&#xff09;,其中最核心的概念是组件化Component。 002. 前端为什么需要Router&#xff1f; 答&#xff1a;如果没有Router&#xff0c;浏览器的…

如何在Word中排版出漂亮规整的编程语言代码样式?【☆】

[1] 能输出各种编程语言并保持代码格式和语法高亮显示的网站&#xff1a; PlanetB | Syntax Highlight Code in Word Documents http://www.planetb.ca/syntax-highlight-word Welcome! — Pygments http://pygments.org/ [2] How do you display code snippets in MS Wor…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统&#xff0c;很…

PCA算法中样本方差和协方差的无偏估计与n-1的由来

原文出处&#xff1a; http://blog.sina.com.cn/s/blog_c96053d60101n24f.html 在PCA算法中的方差协方差计算公式中除数为什么是n-1? 假设X为独立同分布的一组随机变量&#xff0c;总体为M&#xff0c;随机抽取N个随机变量构成一个样本&#xff0c;和是总体的均值和方差, 是常…

【Gym - 101915D】Largest Group(二分图最大团,状压dp)

题干&#xff1a; 大黑山上有小小民和小小涛两种物种&#xff0c;山东人小李想要研究这两种物种的关系 奇怪的是大黑山上有相同数量的小小民和小小涛。小李数了数一共有 P 个&#xff0c;小李分别给P个小小民和小小涛编号 1 - P 号&#xff0c;已知每对小小民之间都是好朋友&…

Apollo自动驾驶入门课程第④讲 — 感知(上)

目录 1. 感知的概述 2. 计算机视觉 3. 摄像头图像 4. LiDAR图像 5. 机器学习 6. 神经网络 7. 反向滤波法 本文转自微信公众号&#xff1a;Apollo开发者社区 原创&#xff1a; 阿波君 Apollo开发者社区 8月23日 上一篇文章中&#xff0c;我们发布了无人驾驶技术的 定位篇…

三种经典的洗牌算法

参考原文链接&#xff1a;https://blog.csdn.net/qq_25026989/article/details/89512769 问题描述&#xff1a;洗牌算法是将原来的数组进行打散&#xff0c;使原数组的某个数在打散后的数组中的每个位置上等概率的出现。 主要有3中经典的洗牌算法&#xff1a; 1.抽牌&#x…

【数据库实验课堂】实验一:数据库的管理

实验一&#xff1a;数据库的管理 1、假设SQL Server服务已启动&#xff0c;并以Administrator身份登录计算机&#xff08;文件名称自定&#xff09;&#xff1b;请分别使用Management界面方式和T-SQL语句实现以下操作&#xff1a; 1) 要求在本地磁盘D创建一个学生-课程数据库…

网络编程懒人入门(二):快速理解网络通信协议(下篇)

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本文上篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议&#xff0…

为什么说逻辑回归LR是线性分类器?

问题描述&#xff1a;为什么说逻辑回归LR是非常典型的线性分类器&#xff1f; 首先&#xff0c;我们要弄明白区分线性与非线性分类器的标准是什么&#xff1f;是决策边界&#xff08;Decision Boundary&#xff09; 以二分类&#xff08;LR可以用于多分类&#xff09;为例进行…

【数据库实验课堂】实验二 使用SQL Server管理数据表

实验二 使用SQL Server管理数据表&#xff1a; 1、请在指定数据库内完成以下内容&#xff1a; 1) 依据数据表的结构创建相对应的数据表&#xff0c;表结构如下所示&#xff1b; **学生信息表&#xff08;student&#xff09;**字段名称 字段类型及长度 说明 备注 S…

5, Data Augmentation

Intro 这是深度学习第5课 在本课程结束时&#xff0c;您将能够使用数据增强。 这个技巧让你看起来拥有的数据远远超过实际拥有的数据&#xff0c;从而产生更好的模型。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(ypt_BAotCLo, width800, height45…

朴素贝叶斯算法注意事项(有待完善)

1.朴素贝叶斯算法的优缺点总结&#xff1a; 优点&#xff1a; 朴素贝叶斯模型发源于古典数学理论&#xff0c;有稳定的分类效率&#xff1b;分类速度快&#xff0c;准确度高&#xff1b;对缺失数据不太敏感&#xff0c;算法简单&#xff0c;常用于文本分类&#xff08;如新闻…

网络编程懒人入门(三):快速理解TCP协议一篇就够

转自即时通讯网&#xff1a;http://www.52im.net/ 原作者&#xff1a;阮一峰(ruanyifeng.com&#xff09;&#xff0c;本文由即时通讯网重新整理发布&#xff0c;感谢原作者的无私分享。 1、前言 本系列文章的前两篇《网络编程懒人入门(一)&#xff1a;快速理解网络通信协议…

【数据库实验课堂】实验三:管理SQL Server表数据

以课本指定的数据库为例&#xff0c;并依据数据表的结构创建相对应的数据表&#xff08;student、course、sc&#xff09;&#xff0c;请分别使用Management Stuio界面方式及T-SQL 语句实现进行以下操作&#xff1a; 向各个数据表中插入如下记录&#xff1a; 学生信息表&#…

分类问题的模型评估指标总结

在分类任务下&#xff0c;预测结果(Predicted Condition)与正确标记(True Condition)之间存在四中不同的组合&#xff0c;构成混淆矩阵(可适用于多分类)&#xff0c;通常有这几种主要模型评估指标&#xff1a;精确率(查的准)、召回率(查的全对正样本的区分能力)、F1值(反映模型…

6. A Deeper Understanding of Deep Learning

Intro 这是深度学习第6课。 在本课程结束时&#xff0c;您将了解随机梯度下降和反向传播如何用在深度学习模型中设置权重。 这些主题很复杂&#xff0c;但许多专家认为它们是深度学习中最重要的思想。 Lesson [1] from IPython.display import YouTubeVideo YouTubeVideo(…

JetBrains - IDEA 常用快捷键汇总

【常规】 CtrlShift Enter&#xff0c;语句完成“&#xff01;”&#xff0c;否定完成&#xff0c;输入表达式时按 “&#xff01;”键CtrlE&#xff0c;最近的文件CtrlShiftE&#xff0c;最近更改的文件ShiftClick&#xff0c;可以关闭文件Ctrl[ OR ]&#xff0c;可以跑到大…