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

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

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

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

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

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

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

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

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

【输入样例】
8 8
.@##…#
#…#.#
#.#.##…
…#.###.
#.#…#.
…###.#.
…#.…
.#…###
6 5
..#.
.#…
…##.

.#…
…@
9 6

.#…#.
.#.*.#
.####.
…#…
…#…
…#…
…#…
#.@.##
.#…#.
0 0
【输出样例】
10
8
-1

一切尽在代码掌控之中:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x,y,qx,qy,dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},p[1001][4];
char k;
bool b[101][101];//布尔型数组保存迷宫信息
void bfs(){int t=0,w=1;while(t<w){t++;for(int i=9;i<4;i++){x=p[t][1]+dx[i];y=p[t][2]+dy[i];if(x>0&&x<=m&&y>0&&y<=n&&b[x][y])//判断四个方向是否能走或走过 {w++;//尾指针加一 p[w][1]=x;p[w][2]=y;p[w][3]=p[t][3]+1;//经过格子数加一 b[x][y]=false;//将走过的地方设置为不能走 if(x==qx&&y==qy){printf("%d\n",p[w][3]);return; } }}}printf("-1\n");
}
int main(){while(cin>>m>>n){if(m==0&&n==0){return 0;}memset(p,0,sizeof(p));memset(b,0,sizeof(b));//清空数组 for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>k;if(k=='#'){b[i][j]=false;//如果是障碍,就设为假 }else{b[i][j]=true;}if(k=='@'){p[1][1]=i;p[1][2]=j;p[1][3]=0;b[i][j]=false;}if(k=='*'){qx=i;qy=j;}}}bfs();}return 0;
}

仙岛求药 详解(C++)相关推荐

  1. 信息学奥赛一本通(1251:仙岛求药)

    1251:仙岛求药 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 11479     通过数: 4968 [题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙 ...

  2. 百练/ 北京大学2016研究生推免上机考试(校内)D: 仙岛求药(广度优先搜索)

    题目来源:http://noi.openjudge.cn/ch0205/2727/ 2727:仙岛求药 总时间限制: 1000ms  内存限制:65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他 ...

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

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

  4. 仙岛求药(信息学奥赛一本通-T1251)

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

  5. 一本通题解——1251:仙岛求药

    题目相关 题目链接 一本通 OJ,http://ybt.ssoier.cn:8088/problem_show.php?pid=1251. 计蒜客 OJ,https://nanti.jisuanke. ...

  6. 文件岛 服务器大陆,究极数码暴龙文件岛怎么玩 文件岛玩法详解

    究极数码暴龙文件岛怎么玩?有些玩家在进入文件岛的时候不知道该怎么做!文件岛怎么才能获得资源最大化?下面小编就为大家带来文件岛玩法详解.一起来看看吧. 玩家到达35级即可在冒险板块中进入文件岛,如果没有 ...

  7. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法

    详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...

  8. pytorch自动求梯度—详解

    构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数.搭建计算图的过程,称为"正向传播",这个是需要我们自己 ...

  9. EXCEL表格-按条件求和、求平均值、求个数详解

    ❤关注我,不迷路❤ 点击进入EXCEL综合应用场景专栏 生活中经常会遇到按条件求和.按条件求平均值的场景,比如统计某个班级中成绩在60分以上的男生的个数,本文将以递进的形式进行对多种场景从易至难讲解, ...

  10. C语言:表达式求值详解

    文章目录 前言 一.隐式类型转换 二.算术转换 三.操作符的属性 前言 该篇文章是笔者之前一篇文章C语言操作符详解的后续补充: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式 ...

最新文章

  1. 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
  2. [TFRecord文件格式]基本介绍
  3. Android MVP模式就是这么回事儿
  4. MYSQL数据损坏修复方法
  5. WebApi client 的面向切面编程
  6. java 计算信度,11.5.2 评分者信度实例分析
  7. 【C++基础学习】const限定修饰符详解
  8. servlet配置log4J
  9. 开发打开设置洁面_用了两到三年的华为手机,一键打开quot;开发者选项quot;,帮助性能加速...
  10. 高德地图集成之基础定位
  11. php计算运费价格,PHP: UPS API, UPS 运费计算, UPS接口
  12. cad打开卡死_CAD点打开或者保存就卡死无响应的解决方法
  13. 获取上个月第一天和最后一天
  14. 低智商和高智商的9个表现是什么
  15. 【论文翻译】High-Performance Long-Term Tracking with Meta-Updater
  16. 服务器1521端口被关闭,如何开启
  17. 编程二大问题—c++常用库函数总结
  18. 单位换算android,Android单位换算
  19. three.js绘制波浪面_使用Three.js构建建筑物波浪动画
  20. python修改个人信息代码,牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息...

热门文章

  1. 《css世界》常用技巧——读书笔记
  2. 每天学点Python Cookbook(三)
  3. 保持新投资技术先进性和保护既有投资的完美均衡 —— 成都地铁4号线二期PIS车地无线通信...
  4. 搭建一个wordpress
  5. MYSQL 取上一条记录,与下一条记录
  6. VMwareESX上的SCOM控制台无法正常运行
  7. mysql 密码输入正确,登陆失败的原因
  8. 估算软件规模之前如何明确划分系统边界?
  9. Structs 2 session 学习
  10. Provisioning Services 7.8 入门系列教程之四 目标设备安装