【题目描述】

少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来帮助他实现这个目标。

下图 显示了一个迷阵的样例及李逍遥找到仙药的路线。

【输入】

输入有多组测试数据. 每组测试数据以两个非零整数 M 和 N 开始,两者均不大于20。M 表示迷阵行数, N 表示迷阵列数。接下来有 M 行, 每行包含N个字符,不同字符分别代表不同含义:

1)‘@’:少年李逍遥所在的位置;

2)‘.’:可以安全通行的方格;

3)‘#’:有怪物的方格;

4)‘*’:仙药所在位置。

当在一行中读入的是两个零时,表示输入结束。

【输出】

对于每组测试数据,分别输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。如果他不可能找到仙药, 则输出 -1。

【输入样例】

  1. 8 8
  2. .@##...#
  3. #....#.#
  4. #.#.##..
  5. ..#.###.
  6. #.#...#.
  7. ..###.#.
  8. ...#.*..
  9. .#...###
  10. 6 5
  11. .*.#.
  12. .#...
  13. ..##.
  14. .....
  15. .#...
  16. ....@
  17. 9 6
  18.  
  19. .#..#.
  20. .#.*.#
  21. .####.
  22. ..#...
  23. ..#...
  24. ..#...
  25. ..#...
  26. #.@.##
  27. .#..#.
  28. 0 0

【输出样例】

  1. 10
  2. 8
  3. -1
  4.  
  5. 思路:直接跑bfsbfs大法好!要注意队列是结构体
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<queue>
  6. #include<stack>
  7. #include<vector>
  8. #include<map>
  9. #include<string>
  10. #include<cstring>
  11. using namespace std;
  12. ;
  13. ;
  14. inline int read() {
  15. char c = getchar();
  16. , f = ;
  17. ') {
  18. ;
  19. c = getchar();
  20. }
  21. +c-',c=getchar();
  22. return x * f;
  23. }
  24. struct node {
  25. int x,y,step;
  26. node() {}
  27. node(int x1,int y1,int step1):x(x1),y(y1),step(step1) {}
  28. };
  29. ;
  30. int visit[N][N];
  31. int n,m;
  32. int a,b,c,d;
  33. ][]= {{,},{-,},{,},{,-}};
  34. char s[N][N];
  35. int bfs(int x,int y) {
  36. visit[x][y]=;
  37. queue<node>Q;
  38. Q.push(node(x,y,));
  39. while(!Q.empty()) {
  40. node a=Q.front();
  41. Q.pop();
  42. ; i<; i++) {
  43. ];
  44. ];
  45. &&kkx<n&&kky>=&&kky<m&&(!visit[kkx][kky])&&(s[kkx][kky]=='.')) {
  46. visit[kkx][kky]=;
  47. if(kkx==c&&kky==d) {
  48. );
  49. }
  50. Q.push(node(kkx,kky,a.step+));
  51. }
  52. }
  53. }
  54. ;
  55. }
  56. int main() {
  57. ,n,m) {
  58. memset(visit,,sizeof(visit));
  59. ; i<n; i++) {
  60. scanf("%s",s[i]);
  61. }
  62. ; i<n; i++) {
  63. ; j<m; j++) {
  64. if(s[i][j]=='@') {
  65. a=i;
  66. b=j;
  67. } else if(s[i][j]=='*') {
  68. c=i;
  69. d=j;
  70. s[i][j]='.';
  71. }
  72. }
  73. }
  74. int x=bfs(a,b);
  75. if(x) {
  76. cout<<x<<endl;
  77. } else cout<<"-1"<<endl;
  78. }
  79. ;
  80. }
  1.  
  1.  
  1.  

【bfs】仙岛求药的更多相关文章

  1. noi 2727:仙岛求药

    2727:仙岛求药 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难 ...

  2. OpenJudge 2727 仙岛求药

    总时间限制:  1000ms 内存限制:  65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...

  3. AC日记——仙岛求药 openjude 2727

    仙岛求药 思路: bfs: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #inc ...

  4. Java实现 计蒜客 1251 仙岛求药

    仙岛求药 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由 M \times NM× ...

  5. NOI 2727:仙岛求药 x

    总时间限制:  1000ms 内存限制:  65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...

  6. [OpenJudge] 2727 仙岛寻药

    2727:仙岛求药 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进 ...

  7. ACM_魔仙岛探险(深搜)

    魔仙岛探险 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小敏通过秘密方法得到一张不完整的魔仙岛航拍地图.魔仙岛由一个主岛和一些 ...

  8. I - Interesting Calculator (bfs使用优先队列求步数最小或者花费最小)

    题目链接:https://cn.vjudge.net/contest/245287#problem/I 代码: 使用普通的队列和优先队列相比,优先队列能更快地找到目的变量. #include<i ...

  9. 宽度搜索(BFS)中求最短路径问题理解记录

    借助ACM1242题深入理解迷宫类最短路径搜索并记录路径长度的问题及解决方法:这是初次接触优先队列,尤其是不知道该怎样去记忆在结构体重自定义大小比较的符号方向,很容易混淆符号向哪是从大到小排列,向哪是 ...

随机推荐

  1. #Leetcode# 836. Rectangle Overlap

    https://leetcode.com/problems/rectangle-overlap/ A rectangle is represented as a list [x1, y1, x2, y ...

  2. 配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题

    配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题 - 大venn的博客 - CSDN博客https://blog.csdn.net/u011135260/article/details/ ...

  3. jmeter的jtl日志转html报告常见报错笔记

    问题:生成的jmeter文件可以放任意位置 输入命令转换hmtl报告 PS D:\user\80003288\桌面\Ques> jmeter -g .\test1.jtl -e -o .\rep ...

  4. switch变种玩法

    标准版本: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+; break; } switch: ...

  5. mvc后台可以使前台弹出警告框的几种方法

    1,引用博主的 第一种方案:在jsp页面使用java代码实现. 后台处理代码:(把要提示的数据放到session中.) String message = ""; message = ...

  6. TField OnValidate 事件

    Occurs just before the data is written to the record buffer. Write an OnValidate event handler to va ...

  7. 数据库迁移(创建关联等操作) Target database is not up to date报错

    使用Mysql-sqlalchemy执行数据库迁移 来更新数据库: 队长试探性的在网上找了几种方案 依然没有解决报错问题: 后来看了https://www.aliyun.com/jiaocheng/4 ...

  8. String 常见的十种方法!

    public class ZiFuChuan { public static void main(String[] args) { ZiFuChuanFangFa f=new ZiFuChuanFan ...

  9. Serialize a Long as a String

    今天在写接口的时候,用postman测试,返回数据与数据库一一对应,但是给前端返回的结果,除了主键id以外,其他都一样,如下 postman: { "unitPrice": nul ...

  10. web跨域请求

    第一种情况: 1. sina.com=====>baidu.com/xxx.jsp 也就是前面的域名不相同,(url第三根斜杠之前的内容,也就是主机) 2:localhost =====> ...