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

思路:因为只有一个终点 所以从终点开始搜索 每次用优先队列弹出最优点的情况

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<string>
  6. #include<vector>
  7. #include<stack>
  8. #include<bitset>
  9. #include<cstdlib>
  10. #include<cmath>
  11. #include<set>
  12. #include<list>
  13. #include<deque>
  14. #include<map>
  15. #include<queue>
  16. #define ll long long int
  17. using namespace std;
  18. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  19. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  20. int moth[]={,,,,,,,,,,,,};
  21. int dir[][]={, ,, ,-, ,,-};
  22. int dirs[][]={, ,, ,-, ,,-, -,- ,-, ,,- ,,};
  23. const int inf=0x3f3f3f3f;
  24. const ll mod=1e9+;
  25. int n,m;
  26. char G[][];
  27. bool vis[][];
  28. int ans;
  29. struct node{
  30. int x,y,v;
  31. friend operator < (node a,node b){
  32. return a.v>b.v;
  33. }
  34. };
  35. void bfs(int ex,int ey){
  36. priority_queue<node> q;
  37. node t; t.x=ex; t.y=ey; t.v=;
  38. q.push(t);
  39. while(!q.empty()){
  40. node temp=q.top();
  41. q.pop();
  42. if(G[temp.x][temp.y]=='S'){
  43. ans=temp.v;
  44. return ;
  45. }
  46. for(int i=;i<;i++){
  47. int xx=temp.x+dir[i][];
  48. int yy=temp.y+dir[i][];
  49. if(xx>=&&xx<=n&&yy>=&&yy<=m&&!vis[xx][yy]&&G[xx][yy]!='X'){
  50. vis[xx][yy]=;
  51. node tt; tt.x=xx; tt.y=yy;
  52. if(G[xx][yy]>=''&&G[xx][yy]<='')
  53. tt.v=temp.v+G[xx][yy]-'';
  54. else tt.v=temp.v;
  55. q.push(tt);
  56. }
  57. }
  58. }
  59. ans=-;
  60. }
  61. int main(){
  62. ios::sync_with_stdio(false);
  63. //freopen("in.txt","r",stdin);
  64. int t;
  65. cin>>t;
  66. while(t--){
  67. memset(vis,,sizeof(vis));
  68. cin>>n>>m;
  69. int ex,ey;
  70. for(int i=;i<=n;i++)
  71. for(int j=;j<=m;j++){
  72. cin>>G[i][j];
  73. if(G[i][j]=='E')
  74. ex=i,ey=j;
  75. }
  76. bfs(ex,ey);
  77. cout<<ans<<endl;
  78. }
  79. return ;
  80. }

2019 校内赛 RPG的地牢猎手(bfs+优先队列)的更多相关文章

  1. 2019 校内赛 RPG的天赋分支(贪心)

    Problem Description 很多游戏都有天赋树的概念,天赋树的不同分支具有不同的属性加成,那么合理选择分支就非常重要了.Luke最近沉迷一款RPG游戏,它的天赋树机制如下:角色具有n个可选 ...

  2. hdu6578 2019湖南省赛D题Modulo Nine 经典dp

    目录 题目 解析 AC_Code @ 题目 第一题题意是一共有{0,1,2,3}四种数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]内必须有恰好x个不同的数字. 第二题 ...

  3. POJ 1724 ROADS(BFS+优先队列)

    题目链接 题意 : 求从1城市到n城市的最短路.但是每条路有两个属性,一个是路长,一个是花费.要求在花费为K内,找到最短路. 思路 :这个题好像有很多种做法,我用了BFS+优先队列.崔老师真是千年不变 ...

  4. hdu 1242 找到朋友最短的时间 (BFS+优先队列)

    找到朋友的最短时间 Sample Input7 8#.#####. //#不能走 a起点 x守卫 r朋友#.a#..r. //r可能不止一个#..#x.....#..#.##...##...#.... ...

  5. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  6. hdu1839(二分+优先队列,bfs+优先队列与spfa的区别)

    题意:有n个点,标号为点1到点n,每条路有两个属性,一个是经过经过这条路要的时间,一个是这条可以承受的容量.现在给出n个点,m条边,时间t:需要求在时间t的范围内,从点1到点n可以承受的最大容量... ...

  7. BFS+优先队列+状态压缩DP+TSP

    http://acm.hdu.edu.cn/showproblem.php?pid=4568 Hunter Time Limit: 2000/1000 MS (Java/Others)    Memo ...

  8. POJ - 2312 Battle City BFS+优先队列

    Battle City Many of us had played the game "Battle city" in our childhood, and some people ...

  9. HDU 1242 -Rescue (双向BFS)&amp;&amp;( BFS+优先队列)

    题目链接:Rescue 进度落下的太多了,哎╮(╯▽╰)╭,渣渣我总是埋怨进度比别人慢...为什么不试着改变一下捏.... 開始以为是水题,想敲一下练手的,后来发现并非一个简单的搜索题,BFS做肯定出 ...

随机推荐

  1. Tomcat 目录结构以及基本配置

    1 Tomcat 目录层次结构 ① bin:存放启动和关闭tomcat 的脚本文件② conf: 存放配置文件 server.xml:该文件用于配置和server 相关的信息,比如tomcat 启动端 ...

  2. Azure系列2.1.12 —— CloudBlobDirectory

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  3. Linux启动/停止/重启Mysql数据库

    1.查看mysql版本 1)status; 2)select version(); 2.Mysql启动 1)使用 service 启动: service mysqld start (5.0版本是mys ...

  4. [转帖]利用hydra(九头蛇)暴力破解内网windows登录密码

    利用hydra(九头蛇)暴力破解内网windows登录密码 https://blog.csdn.net/weixin_37361758/article/details/77939070 尝试了下 能够 ...

  5. RedHat Enterprise Linux 6.4使用yum安装出现This system is not registered to Red Hat Subscription Management

    我虚拟机安装的系统是RedHat Enterprise Linux 6.4-i686,是32位的.使用yum命令安装软件时候出现以下错误: This system is not registered ...

  6. SpringMVC配置三大组件

    1.组件扫描器 使用组件扫描器省去在spring容器配置每个Controller类的繁琐. 使用<context:component-scan>自动扫描标记@Controller的控制器类 ...

  7. 在eclipse中spring的xml配置文件标签中class路径全限定名自动提示设置

    这个自动提示其实很简单,没有网上说的那些要在help下的Install中输入网址来下载更新一堆东西那么复杂. 只需要打开Help — — >Eclipse Marketplace... 然后在该 ...

  8. 取得数据表中前N条记录,某列重复的话只取第一条记录

    项目需要筛选出不重复数据,以前没有做过,第一反应就是利用distinct处理,但是弄了好久也没搞出来,大家有知道的望告知下. 这次筛选没有使用distinct ,是利用group by ,利用id为唯 ...

  9. TP5上传图片

    模板: <form action="{:url('Temp/addTempDo')}" enctype="multipart/form-data" met ...

  10. Lodop打印如何隐藏table某一列

    Lodop打印超文本,既可以打印页面上存在的某些部分,也可以自己组织超文本和css样式传入,有些需要打印的页面表格里,会有一列有编辑删除等按钮,用于对于数据库数据的操作,在打印的时候,这一列由于不属于 ...