BFS-Acwing-1101. 献给阿尔吉侬的花束

题目:

阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。

今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。

现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。

迷宫用一个 R×C 的字符矩阵来表示。

字符 S 表示阿尔吉侬所在的位置,字符 E 表示奶酪所在的位置,字符 # 表示墙壁,字符 . 表示可以通行。

阿尔吉侬在 1 个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。

输入格式
第一行是一个正整数 T,表示一共有 T 组数据。

每一组数据的第一行包含了两个用空格分开的正整数 R 和 C,表示地图是一个 R×C 的矩阵。

接下来的 R 行描述了地图的具体内容,每一行包含了 C 个字符。字符含义如题目描述中所述。保证有且仅有一个 S 和 E。

输出格式
对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。

若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。

每组数据的输出结果占一行。

数据范围
1<T≤10,
2≤R,C≤200
输入样例:
3
3 4
.S…
###.
…E.
3 4
.S…
.E…

3 4
.S…

…E.
输出样例:
5
1
oop!

题解:

模板题。模板题。模板题。

二维矩阵中的坐标注意pair的用法,同时可以用dis二维数组代替标记的bool数组vis,最后输出dis即可。二维矩阵中的坐标注意pair的用法,同时可以用dis二维数组代替标记的bool数组vis,最后输出dis即可。二维矩阵中的坐标注意pair的用法,同时可以用dis二维数组代替标记的bool数组vis,最后输出dis即可。

注意:若在点(x,y)=end到终点提前退出bfs,此时的队列Q未必是空的,因此把队列定义在bfs函数内部,保证每次均初始化为空。若不提前退出,那么每次bfs终止的条件都是队列Q为空,因此可以把Q定义为全局变量。注意:若在点(x,y)=end到终点提前退出bfs,此时的队列Q未必是空的,因此把队列定义在bfs函数内部,\\保证每次均初始化为空。若不提前退出,那么每次bfs终止的条件都是队列Q为空,因此可以把Q定义为全局变量。注意:若在点(x,y)=end到终点提前退出bfs,此时的队列Q未必是空的,因此把队列定义在bfs函数内部,保证每次均初始化为空。若不提前退出,那么每次bfs终止的条件都是队列Q为空,因此可以把Q定义为全局变量。


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define P pair<int,int>
#define x first
#define y second
#define ll long long
#define inf 0x7fffffff
using namespace std;
const int N=210;
int T,r,c;
char mp[N][N];
int dis[N][N];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void bfs(P S,P E)
{queue<P>Q;dis[S.x][S.y]=0;Q.push(S);while(!Q.empty()){P tmp=Q.front();Q.pop();int x,y;for(int i=0;i<4;i++){x=tmp.x+dir[i][0];y=tmp.y+dir[i][1];if(x<0||y<0||x>=r||y>=c||mp[x][y]=='#'||dis[x][y]!=-1) continue;dis[x][y]=dis[tmp.x][tmp.y]+1;if(x==E.x&&y==E.y) return;///注意Q要清空,把Q定义在函数内部Q.push(make_pair(x,y));}}
}int main()
{cin>>T;while(T--){memset(dis,-1,sizeof(dis));cin>>r>>c;for(int i=0;i<r;i++) scanf("%s",mp[i]);P S,E;for(int i=0;i<r;i++)for(int j=0;j<c;j++)if(mp[i][j]=='S') S={i,j};else if(mp[i][j]=='E') E={i,j};bfs(S,E);if(dis[E.x][E.y]==-1) cout<<"oop!"<<endl;else cout<<dis[E.x][E.y]<<endl;}return 0;
}

BFS-Acwing-1101. 献给阿尔吉侬的花束相关推荐

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

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

  2. AcWing 1101. 献给阿尔吉侬的花束

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

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

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

  4. AcWing 1101. 献给阿尔吉侬的花束(bfs)

    标准的bfs,不过和花束一点关系都没有- Problem bfs模板,再复习一遍 import java.io.BufferedReader; import java.io.IOException; ...

  5. 27、Acwing 2021/2/5 1101. 献给阿尔吉侬的花束

    27.Acwing 2021/2/5 1101. 献给阿尔吉侬的花束 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了 ...

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

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

  7. Acwing 红与黑 献给阿尔吉侬的花束(bfs与dfs新技巧)

    思路 首先将图中所有的点,都声明为题目的"不可到底"的点,这样在bfs或者dfs判断条件时候,判断走过的点,越界和不可走的点三者就可以合为一个条件,极大了减少了判断的复杂性 Acw ...

  8. 1101. 献给阿尔吉侬的花束 题解

    跳转链接 https://www.acwing.com/problem/content/1103/ 来源:<信息学奥赛一本通> 题目描述 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走 ...

  9. 1101. 献给阿尔吉侬的花束 (bfs

    添加链接描述 #include<bits/stdc++.h> using namespace std; const int N=210; string s[N]; typedef pair ...

  10. Ac 1101. 献给阿尔吉侬的花束

    刚开始看到这个题,我第一个想到的是bfs,都是经典套路了,遇到距离最短就用bfs,但是求解的过程不是很顺利 因为之前用递归实现了类似bfs的一种方式,就是标记是否走过,然后以前是类似于flood fi ...

最新文章

  1. 使用Docker-Docker for Web Developers(2)
  2. 友盟-上传开发发布证书
  3. [转载]迅速成长的两个重要途径
  4. 读进程和写进程同步设计_浅谈unix进程进程间通信IPC原理
  5. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)
  6. HTML (3)---HTML编辑器
  7. linux怎么让cat运行,使用lolcat让你的Linux命令行出现七彩虹
  8. 将tomcat设置成window自启动服务
  9. c++写一个类后编译发现class重定义
  10. 企业之经典《HSRP热备份路由协议高级配置》技术
  11. SPOJ Pouring Water
  12. java的注解定义map_java – MapStruct:丰富映射注释以定义自定义映射器
  13. 科赫雪花java_java递归实现科赫雪花
  14. c语言实现矩阵转置、矩阵乘法
  15. openflow通信流程总结
  16. Connect Four四子棋c++程序 - 用户交互(1)
  17. List 接口和常用方法
  18. java 求任意输入半径,圆的周长和面积。
  19. 爬虫(豆瓣电影Top250数据分析)学习笔记
  20. VuePress 博客之 SEO 优化(一) sitemap 与搜索引擎收录

热门文章

  1. 【Linux】压缩工具-zip
  2. 用Python轻松制作一个股票K线图网站
  3. 无线AP、无线路由器,你还分不清吗?
  4. javacv录制桌面视频_免费在任何操作系统上录制桌面视频
  5. 阿里云maven仓库无法下载SpringCloud相关依赖问题
  6. 前端学习day40day41:10-JS基础之定时器
  7. 泸州天立2021年高考成绩查询时间,泸州天立国际学校2021年排名
  8. springboot banner
  9. 基于python多模型并行的新闻分类
  10. 华为手机编写html软件,华为手机自带4个翻译功能,一键实时翻译多国语言,无需安装软件...