RPG的地牢猎手

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)

Total Submission(s) : 24   Accepted Submission(s) : 7

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

Luke最近沉迷一款RPG游戏,游戏中角色可以进入地牢关卡,只要顺利走出地牢就可以获得奖励。
地牢表示为n行m列的块矩阵,其中每个块只可以是障碍块、入口、出口或数字块,角色不能通过障碍块,其余块均可任意通行,角色经过数字块时疲劳度会增加相应的数字(经过出入口不产生疲劳)。
地牢有若干入口和1个出口,角色可以任意选择入口。
抵达出口时的疲劳值越少,地牢提供的奖励越多,为了尽可能获得更多的奖励,问从进入地牢到离开地牢所产生的疲劳值最少是多少,如果无法抵达出口,输出-1。
图示:障碍块 ’X’,数字块 ’0’~’9’,入口 ‘S’,出口 ‘E’。

Input

第一行为正整数t表示测试组数。
随后为t组输入,每组测试中,第一行为矩阵行列数n m,随后n行长度为m的字符串表示地牢。
t<=100  
1<=n,m<=100

Output

每组测试输出一行表示最小的疲劳度,如果无法抵达出口则输出-1。

Sample Input

1
3 3
SXS
123
XEX

Sample Output

3

解析:

用广搜从终点出发搜索起点,用优先队列存储

ac:

#include<bits/stdc++.h>
using namespace std;int tx[4]={1,0,-1,0};
int ty[4]={0,1,0,-1};char mp[101][101]={0};
int vis[101][101]={0};int flag=0,n,m,ans=0;struct node
{int x,y,step;friend bool operator<(node a,node b){return a.step>b.step;}
}cc;void bfs(int x,int y)
{memset(vis,0,sizeof(vis));priority_queue<node> que;cc.x=x,cc.y=y,cc.step=0;que.push(cc);while(!que.empty()){node uu=que.top();que.pop();if(mp[uu.x][uu.y]=='S'){flag=1;ans=uu.step;return ;}for(int i=0;i<4;i++){cc.x=uu.x+tx[i];cc.y=uu.y+ty[i];if(cc.x>=0&&cc.y>=0&&cc.x<n&&cc.y<m){if(mp[cc.x][cc.y]=='X') continue;cc.step=uu.step;if(mp[cc.x][cc.y]>='0'&&mp[cc.x][cc.y]<='9')cc.step+=mp[cc.x][cc.y]-'0';if(vis[cc.x][cc.y]==0){vis[cc.x][cc.y]=1;que.push(cc);}}}}
}int main()
{int t;scanf("%d",&t);while(t--){flag=0;scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%s",&mp[i]);for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(mp[i][j]=='E'){bfs(i,j);break;}}if(flag)printf("%d\n",ans);elseprintf("-1\n");}return 0;
}

RPG的地牢猎手(优先队列广搜)相关推荐

  1. 2019 校内赛 RPG的地牢猎手(bfs+优先队列)

    Problem Description Luke最近沉迷一款RPG游戏,游戏中角色可以进入地牢关卡,只要顺利走出地牢就可以获得奖励. 地牢表示为n行m列的块矩阵,其中每个块只可以是障碍块.入口.出口或 ...

  2. hdu5025 状态压缩广搜

    题意:       悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...

  3. 【图论专题】BFS中的双向广搜 和 A-star

    双向广搜 AcWing 190. 字串变换 #include <cstring> #include <iostream> #include <algorithm> ...

  4. 八数码 poj 1077 广搜 A* IDA*

    经典的八数码问题,有人说不做此题人生不完整,哈哈. 状态总数是9! = 362880 种,不算太多,可以满足广搜和A*对于空间的需求. 状态可以每次都动态生成,也可以生成一次存储起来,我用的动态生成, ...

  5. 独轮车(广搜状态转移的下一步伐的理解)

    Problem D 独轮车 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 独轮车的轮子上有红.黄.蓝.白.绿(依顺时针序)5种颜色,在一个如下图所示的20*20的迷宫内每走 ...

  6. Go 分布式学习利器(15) -- Go 实现 深搜和广搜

    强化语法,回顾算法. 通过Go语言实现 深度优先搜索 和 广度优先搜索,来查找社交网络中的三度好友关系(三度指的是一个节点到 其相邻节点 到 其相邻节点的节点 ,图递增三层好友关系). 涉及到的Go语 ...

  7. 搜索:广搜 词语阶梯

    问题描述以及解决过程如下导图 广搜实现如下 #include <iostream> #include <algorithm> #include <vector> # ...

  8. [NC23486]小A与小B 双向广搜

    题解:这个题属于走迷宫类型问题的一个升级版吧,不同之处在于一秒钟小A走一步,小B可以走两步,这两种事件是同时发生的,所以我们每秒钟让A扩散一步,让B扩散两步. 两个人走过的路径分别用 visited[ ...

  9. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

最新文章

  1. 苹果发布首款 Mac 自研芯片 M1,贯通生态快人一步!
  2. FPGA之道(45)正确的变量访问思路
  3. ubuntu 安装Gogland
  4. POJ - 2065 SETI(高斯消元解方程(取模))
  5. python怎么用matplotlib画,用matplotlib在python中绘制OHLC图
  6. Sentinel 分布式系统的流量防卫兵
  7. 最近遇到的一些事情反思的结果
  8. Pulseaudio之nemo(二十二)
  9. android webview 字体被放大,解决因为手机设置字体大小导致h5页面在webview中变形的BUG...
  10. 微型计算机原理王忠民PPT,微型计算机原理4 王忠民著.ppt
  11. 如何设计微信公众号的封面图?教你设计自己的专属公众号封面
  12. Linux之查看物理主机的CPU温度
  13. 维基百科的语料库下载以及信息提取笔记
  14. (小说)代码,也是有温度的。一个35岁程序员的心理蜕变。
  15. 一年中最后一个月的最后一天说说_2020只剩最后一个月的励志说说致自己
  16. Rails+Nginx+Passenger安装配置 简洁可靠
  17. 设计模式-请假流程-责任链模式
  18. 如何将macbook触摸板和外接鼠标的滚轮设置相反方向
  19. Java 开源中文分词器Ansj 学习教程
  20. 【转载】透视“专利恶霸”系列之三 2017年,专利恶霸的中国行动元年

热门文章

  1. api返回图片如何在界面中显示
  2. post man 基本操作
  3. jstl标签c:choose,c:when,c:otherwise用法
  4. 时空大数据可视化专栏
  5. MyBatisPlus快速入门
  6. 2018年值得一看的搞笑电视剧!
  7. bim的二次开发需要什么语言_BIM软件的二次开发是什么?都需要做哪些准备?
  8. 微信公众平台在高校教育工作中的使用
  9. 【博客418】cpu平坦模型和分段模型
  10. 鸿蒙手机电脑无缝对接,华为鸿蒙超级终端功能曝光,自动连接附近设备实现无缝协同工作...