仙岛求药 详解(C++)
【题目描述】
少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由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++)相关推荐
- 信息学奥赛一本通(1251:仙岛求药)
1251:仙岛求药 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 11479 通过数: 4968 [题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙 ...
- 百练/ 北京大学2016研究生推免上机考试(校内)D: 仙岛求药(广度优先搜索)
题目来源:http://noi.openjudge.cn/ch0205/2727/ 2727:仙岛求药 总时间限制: 1000ms 内存限制:65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他 ...
- Java实现 计蒜客 1251 仙岛求药
仙岛求药 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由 M \times NM× ...
- 仙岛求药(信息学奥赛一本通-T1251)
[题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由M×N个方格组成,有的 ...
- 一本通题解——1251:仙岛求药
题目相关 题目链接 一本通 OJ,http://ybt.ssoier.cn:8088/problem_show.php?pid=1251. 计蒜客 OJ,https://nanti.jisuanke. ...
- 文件岛 服务器大陆,究极数码暴龙文件岛怎么玩 文件岛玩法详解
究极数码暴龙文件岛怎么玩?有些玩家在进入文件岛的时候不知道该怎么做!文件岛怎么才能获得资源最大化?下面小编就为大家带来文件岛玩法详解.一起来看看吧. 玩家到达35级即可在冒险板块中进入文件岛,如果没有 ...
- 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法
详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...
- pytorch自动求梯度—详解
构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数.搭建计算图的过程,称为"正向传播",这个是需要我们自己 ...
- EXCEL表格-按条件求和、求平均值、求个数详解
❤关注我,不迷路❤ 点击进入EXCEL综合应用场景专栏 生活中经常会遇到按条件求和.按条件求平均值的场景,比如统计某个班级中成绩在60分以上的男生的个数,本文将以递进的形式进行对多种场景从易至难讲解, ...
- C语言:表达式求值详解
文章目录 前言 一.隐式类型转换 二.算术转换 三.操作符的属性 前言 该篇文章是笔者之前一篇文章C语言操作符详解的后续补充: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式 ...
最新文章
- 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
- [TFRecord文件格式]基本介绍
- Android MVP模式就是这么回事儿
- MYSQL数据损坏修复方法
- WebApi client 的面向切面编程
- java 计算信度,11.5.2 评分者信度实例分析
- 【C++基础学习】const限定修饰符详解
- servlet配置log4J
- 开发打开设置洁面_用了两到三年的华为手机,一键打开quot;开发者选项quot;,帮助性能加速...
- 高德地图集成之基础定位
- php计算运费价格,PHP: UPS API, UPS 运费计算, UPS接口
- cad打开卡死_CAD点打开或者保存就卡死无响应的解决方法
- 获取上个月第一天和最后一天
- 低智商和高智商的9个表现是什么
- 【论文翻译】High-Performance Long-Term Tracking with Meta-Updater
- 服务器1521端口被关闭,如何开启
- 编程二大问题—c++常用库函数总结
- 单位换算android,Android单位换算
- three.js绘制波浪面_使用Three.js构建建筑物波浪动画
- python修改个人信息代码,牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息...