1. 2727:仙岛求药
  2. 查看 提交 统计 提问
  3. 总时间限制: 1000ms 内存限制: 65536kB
  4. 描述
  5. 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来帮助他实现这个目标。
  6. 下图 显示了一个迷阵的样例及李逍遥找到仙药的路线.
  7. 输入
  8. 输入有多组测试数据. 每组测试数据以两个非零整数 M N 开始,两者均不大于20M 表示迷阵行数, N 表示迷阵列数。接下来有 M 行, 每行包含N个字符,不同字符分别代表不同含义:
  9. 1) ‘@’:少年李逍遥所在的位置;
  10. 2) ‘.’:可以安全通行的方格;
  11. 3) ‘#’:有怪物的方格;
  12. 4) ‘*’:仙药所在位置。
  13. 当在一行中读入的是两个零时,表示输入结束。
  14. 输出
  15. 对于每组测试数据,分别输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。如果他不可能找到仙药, 则输出 -1
  16. 样例输入
  17. 8 8
  18. .@##...#
  19. #....#.#
  20. #.#.##..
  21. ..#.###.
  22. #.#...#.
  23. ..###.#.
  24. ...#.*..
  25. .#...###
  26. 6 5
  27. .*.#.
  28. .#...
  29. ..##.
  30. .....
  31. .#...
  32. ....@
  33. 9 6
  34. .#..#.
  35. .#.*.#
  36. .####.
  37. ..#...
  38. ..#...
  39. ..#...
  40. ..#...
  41. #.@.##
  42. .#..#.
  43. 0 0
  44. 样例输出
  45. 10
  46. 8
  47. -1

正常的bfs,注意起点终点和memset。

  1. //Writer:GhostCai && His Yellow Duck
  2. #include<iostream>
  3. #include<queue>
  4. #include<cstring>
  5. #define MAXN 22
  6. using namespace std;
  7. int m,n;
  8. int ans=-1;
  9. int a[MAXN][MAXN];
  10. bool vis[MAXN][MAXN];
  11. int aimx,aimy,sx,sy;
  12. int dx[4]={0,1,0,-1};
  13. int dy[4]={1,0,-1,0};
  14. struct point{
  15. int x,y,step;
  16. }node,r;
  17. void bfs(int x,int y){
  18. bool flag=0;
  19. vis[x][y]=1;
  20. queue<point> Q;
  21. node.x = x;
  22. node.y = y;
  23. node.step = 0;
  24. Q.push(node);
  25. while(!Q.empty()&&!flag ){
  26. r=Q.front() ;
  27. Q.pop() ;
  28. int i;
  29. for(i=0;i<=3;i++){
  30. int nx=r.x + dx[i];
  31. int ny=r.y + dy[i];
  32. if(nx<1||nx>m||ny<1||ny>n) continue;
  33. if(a[nx][ny]=='#'||vis[nx][ny]) continue;
  34. vis[nx][ny]=1;
  35. node.x = nx;
  36. node.y = ny;
  37. node.step = r.step + 1;
  38. Q.push(node);
  39. if(a[nx][ny]=='*') {
  40. ans=node.step ;
  41. flag=1;
  42. }
  43. }
  44. }
  45. }
  46. int main(){
  47. int i,j;
  48. while(1){
  49. char z[25];
  50. cin>>m>>n;
  51. memset(vis,0,sizeof(vis));
  52. memset(a,0,sizeof(a));
  53. if(m==0&&n==0) return 0;
  54. for(i=1;i<=m;i++){
  55. scanf("%s",z);
  56. for(j=1;j<=n;j++){
  57. a[i][j]=z[j-1];
  58. if(a[i][j]=='@') sx=i,sy=j;
  59. if(a[i][j]=='*') aimx=i,aimy=j;
  60. }
  61. }
  62. bfs(sx,sy);
  63. cout<<ans<<endl;
  64. ans=-1;
  65. }
  66. return 0;
  67. }

[OpenJudge] 2727 仙岛寻药的更多相关文章

  1. OpenJudge 2727 仙岛求药

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

  2. noi 2727:仙岛求药

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

  3. NOI 2727:仙岛求药 x

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

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

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

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

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

  6. 【bfs】仙岛求药

    [题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由M×N个方格组成,有的 ...

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

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

  8. NOI 题库 2727

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

  9. Scrum实施调查案例

    什么是敏捷开发方法?什么是SCRUM? 有人在这个字面上下功夫,说敏捷就是反应要灵敏,动作要快捷:有人还在字面上进行延伸,说敏捷就是又好又快,或者就是多快好省:有人说敏捷就是光写代码不写文档:有人觉得 ...

随机推荐

  1. GenericKeychain

    KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上 下载了GenericKeychain项目后,只需要把“ ...

  2. AttributedString 图片间距问题

    1.NSMutableAttributedString如何显示图片 NSMutableAttributedString *vipStr = [[NSMutableAttributedString al ...

  3. TYVJ1424占卜DIY

    Description lyd学会了使用扑克DIY占卜.方法如下:一副去掉大小王的扑克共52张,打乱后均分为13堆,编号1~13,每堆4张,其中第13堆称作“生命牌”,也就是说你有4条命.这里边,4张 ...

  4. HDU-2182-Frog

    链接:https://vjudge.net/problem/HDU-2182 题意: 有一只青蛙,有n个节点,开始时在1节点,有k次往右跳的机会,每次跳的距离是a-b之间. 每个节点有一个值,到达那个 ...

  5. Codeforces Round #541 (Div. 2) A.Sea Battle

    链接:https://codeforces.com/contest/1131/problem/A 题意: 给两个矩形,一个再上一个在下,求两个矩形合并的周围一圈的面积. 思路: 因为存在下面矩形宽度大 ...

  6. hibernate Day2 笔记

    1.主键生成策略 <!--映射配置文件 >映射配置文件名称和位置没法有固定要求 >映射配置文件中的name属性值写实体类相关内容 -- class 标签name属性值实体类全路径 - ...

  7. rsync服务的安装与配置

    rsync 服务的安装配置与客户端的同步操作   1. 使用xinetd服务运行rsync服务: 服务器端: 1.关闭selinux,设置iptables开放xinetd的873端口 2. yum - ...

  8. Java微信公众平台开发(八)--多媒体消息回复之音乐

    我们上一篇写了关注出发图片的回复.想着在发送一次音乐,最后基于回复消息分类情况下,实现一个简单的只能话回复.先附一张大致效果图. 下面我们进入代码阶段. (一)修改消息转发器MsgDispatcher ...

  9. JS=和==和===的区别

    1. = : 赋值运算,赋值使用2.== :比较运算,仅比较自动转换后的值是否相等,忽略 变量类型,如:'1' == 1 //true 3.=== : 比较运算,比较值和变量类型是否相等,如:'1' ...

  10. c# 实现窗体移动

    一般情况下: .添加下列代码到你的窗体中: #region 轻松移动 bool isInMove; Point oldPoint; void InitializeEasyMove() { isInMo ...