描述

阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。

迷宫用一个R×C的字符矩阵来表示。字符S表示阿尔吉侬所在的位置,字符E表示奶酪所在的位置,字符#表示墙壁,字符.表示可以通行。阿尔吉侬在1个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。

输入

第一行是一个正整数T(1 <= T <= 10),表示一共有T组数据。
每一组数据的第一行包含了两个用空格分开的正整数R和C(2 <= R, C <= 200),表示地图是一个R×C的矩阵。
接下来的R行描述了地图的具体内容,每一行包含了C个字符。字符含义如题目描述中所述。保证有且仅有一个S和E。

输出

对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。每组数据的输出结果占一行。

样例输入

3
3 4
.S..
###.
..E.
3 4
.S..
.E..
....
3 4
.S..
####
..E.

样例输出

5
1
oop!

分析

确定起点与终点的情况下求搜索深度,最通用的就是广搜了。不用记中间的变化状态,只记深度即可,deep多承担个是否已访问标记的作用。

实现

#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
#define MAX (201 * 201)
char a[MAX];
int deep[MAX];
int r, c, sum;int canMoveStep(int pos, int d);
int bfs(int start, int end) {memset(deep, 0, sizeof(deep));if (start == end) return 0;std::queue<int> q;q.push(start);while(!q.empty()) {int pos = q.front();q.pop();for(int i = 0; i < 4; i++) {int move = canMoveStep(pos, i);if (move) {int newPos = pos + move;if (a[newPos] !='#' && !deep[newPos]) {deep[newPos] = deep[pos] + 1;if (newPos == end) return deep[newPos];q.push(newPos);}}}}return -1;
}int canMoveStep(int pos, int d) {if (d == 0) return pos % c != 0 ? -1 : 0;   //第0列不能向左搜索if (d == 1) return (pos + 1) % c != 0;   //最后一列不能向右搜索if (d == 2) return pos < c ? 0 : -c;     //第0行不能向上搜索if (d == 3) return pos >= (sum - c) ? 0 : c;   //最后一行不能向下搜索return 0;
}void print(int result)
{if (result == -1) {cout << "oop!" << endl;} else {cout << result << endl;}
}int main() {
//  freopen("in.txt", "r", stdin);int t, start = 0, end = 0;cin >> t;while(t--) {cin >> r >> c;sum = r * c;for(int i = 0; i < sum; i++) {cin >> a[i];if (a[i] == 'S') {start = i;}else if (a[i] == 'E') {end = i;}}print(bfs(start, end));}return 0;
}

OJ 7218 献给阿尔吉侬的花束__广搜相关推荐

  1. 献给阿尔吉侬的花束(广搜)

    (描述: 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪.现在研究员们想知道 ...

  2. 信息学奥赛一本通 1256:献给阿尔吉侬的花束 | OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束

    [题目链接] ybt 1256:献给阿尔吉侬的花束 OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 设结构体 ...

  3. 7218:献给阿尔吉侬的花束

    总时间限制: 100ms 内存限制: 65536kB 描述 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终 ...

  4. 信息学奥赛一本通(1256:献给阿尔吉侬的花束)

    1256:献给阿尔吉侬的花束 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 7427     通过数: 3067 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...

  5. 1256:献给阿尔吉侬的花束

    1256:献给阿尔吉侬的花束 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 9651     通过数: 4023 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...

  6. 1101. 献给阿尔吉侬的花束

    1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的 ...

  7. AcWing 1101. 献给阿尔吉侬的花束【BFS】

    题目链接:AcWing 1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点 ...

  8. #009#献给阿尔吉侬的花束

    前言 日志,各位看官就当乐子看吧. 正经人谁写日记啊?!! --鹅城县长 不用想乱七八糟的,写就完事儿了.今天没背八股文.(确实是因为看不下去题,没成就感) VideosTV 地址:https://g ...

  9. 【蓝桥杯练习--BFS】1101. 献给阿尔吉侬的花束

    1101. 献给阿尔吉侬的花束 ps:你敢信,这长长的代码就是大佬口中很简单地.非常惬意地写出来的,我也想拥有这种惬意呜呜呜呜 大佬说这种题是有规律的 我要开始找了 本题中的状态就是每个单独的格子 思 ...

最新文章

  1. 都996了,需求还是没法按时交付,怎么办?
  2. 格式android id,android 获取APP的唯一标识applicationId的实例
  3. 用python绘制柱状图标题-使用Python绘制柱形竞赛图
  4. mysql 回收空间_MySQL表的碎片整理和空间回收小结
  5. android 属性动画失败,AndroidAnimationExercise
  6. 【NLP】ACL 2021中的25个Transformers模型
  7. 20150728月度会议
  8. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
  9. struts2中非表单标签的使用 componen
  10. Oracle客房管理系统论文,[转载]基于WEB的酒店管理系统论文【1】
  11. Oracle之自治事务
  12. [c#] const 与 readonly
  13. 分布式存储系统学习笔记(二)—分布式文件系统(4)—内容分发网络(CDN)
  14. python+opencv简单人脸识别(源码)(有手就行)
  15. 图解算法:八大排序算法
  16. Win11磁盘清理怎么没有了?Win11磁盘清理在哪打开?
  17. 追书神器 三星s8+ 语音朗读锁屏后中断问题解决办法
  18. 推荐几个2020年最实用的网站!
  19. S5700交换机出现discarding丢弃错误处理办法
  20. PHP全站开发工程师-第04章 PHP基础语法

热门文章

  1. 4.前端开发工具介绍以及下载使用
  2. 2017微软MVP:在AWS上部署免费的Shiny应用
  3. 生鲜配送社区团购app开发思路
  4. 影响网站排名有哪些因素?
  5. Matplotlib subplot()函数用法详解
  6. Install Prometheus Monitoring On Kubernetes Cluster
  7. 用Hexo+github搭建个人博客
  8. Arithmetic Sharing(算术共享)
  9. python 计算置信区间,计算置信区间(示例代码)
  10. PCA主成分分析的原理解释及python代码实现