Problem:献给阿尔吉侬的花束
Problem Description
阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。
今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。
现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。
迷宫用一个 R×C 的字符矩阵来表示。
字符 S 表示阿尔吉侬所在的位置,字符 E 表示奶酪所在的位置,字符 # 表示墙壁,字符 . 表示可以通行。
阿尔吉侬在 1 个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。
Input Format
第一行是一个正整数 T,表示一共有 T 组数据。
每一组数据的第一行包含了两个用空格分开的正整数 R 和 C,表示地图是一个 R×C 的矩阵。
接下来的 R 行描述了地图的具体内容,每一行包含了 C 个字符。字符含义如题目描述中所述。保证有且仅有一个 S 和 E。
Output Format
对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。
若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。
每组数据的输出结果占一行。
Scope of Data
1 < T ≤ 10,
2 ≤ R, C ≤ 200
Sample Input
Sample Output
Idea
BFS算法,外加一个数组用来判重和记录距离
Program Code
代码来自y总
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>using namespace std;#define x first
#define y secondtypedef pair<int, int> PII;const int N = 210;int T, R, C;
int dist[N][N]; //定义
char maze[N][N];
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};int bfs(int x, int y)
{queue<PII> q;q.push({x, y}); //将初始位置入队memset(dist, -1, sizeof(dist)); //初始化,防止同一个位置被多次访问dist[x][y] = 0; // 将初始位置的距离设置为0while(q.size()){auto t = q.front(); //取队头元素q.pop(); //弹出队头元素for(int i = 0; i < 4; ++ i) //枚举当前元素的4个方位{int a = t.x + dx[i], b = t.y + dy[i];//排除越界、不能通行以及同一位置被多次访问情况if(a < 0 || a >= R || b < 0 || b >= C || maze[a][b] == '#' || dist[a][b] != -1)continue;q.push({a, b}); //将符合规则的位置入队dist[a][b] = dist[t.x][t.y] + 1; //更新距离信息if(maze[a][b] == 'E') //找到最终位置return dist[a][b];}}return 0;
}int main()
{cin >> T;while(T --){int x, y;cin >> R >> C;for(int i = 0; i < R; ++ i)for(int j = 0; j < C; ++ j){cin >> maze[i][j];if(maze[i][j] == 'S') //获取初始位置{x = i;y = j;}}int ans = bfs(x, y); //调用bfs函数if(ans != 0)cout << ans << endl;elsecout << "oop!" << endl;}return 0;
}
- If you have any questions,please feel free to communicate with me.
Problem:献给阿尔吉侬的花束相关推荐
- 信息学奥赛一本通(1256:献给阿尔吉侬的花束)
1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7427 通过数: 3067 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...
- 1256:献给阿尔吉侬的花束
1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9651 通过数: 4023 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...
- 信息学奥赛一本通 1256:献给阿尔吉侬的花束 | OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束
[题目链接] ybt 1256:献给阿尔吉侬的花束 OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 设结构体 ...
- 1101. 献给阿尔吉侬的花束
1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的 ...
- AcWing 1101. 献给阿尔吉侬的花束【BFS】
题目链接:AcWing 1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点 ...
- #009#献给阿尔吉侬的花束
前言 日志,各位看官就当乐子看吧. 正经人谁写日记啊?!! --鹅城县长 不用想乱七八糟的,写就完事儿了.今天没背八股文.(确实是因为看不下去题,没成就感) VideosTV 地址:https://g ...
- 【蓝桥杯练习--BFS】1101. 献给阿尔吉侬的花束
1101. 献给阿尔吉侬的花束 ps:你敢信,这长长的代码就是大佬口中很简单地.非常惬意地写出来的,我也想拥有这种惬意呜呜呜呜 大佬说这种题是有规律的 我要开始找了 本题中的状态就是每个单独的格子 思 ...
- BFS-Acwing-1101. 献给阿尔吉侬的花束
BFS-Acwing-1101. 献给阿尔吉侬的花束 题目: 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就 ...
- AcWing 1101. 献给阿尔吉侬的花束
AcWing 1101. 献给阿尔吉侬的花束 题目链接 题目描述 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点 ...
- 1256:献给阿尔吉侬的花束 2021-01-09
1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个 ...
最新文章
- JSP+Servlet基础一
- C++ Primer 5th笔记(10)chapter10 泛型算法 :迭代器
- java 1%10_Java获取随机数的3种方法
- flex 固定一列_css实现两列固定与一列自适应的几种方法
- hdu3689(kmp+dp)
- 金蝶kis云触发器解决审核和反审核的问题
- C#动态生成Word文档并填充数据(一)
- vc6.0到vc 2008(vc 9.0)的变化
- ARP网关欺骗程序的实现(vs2008 winpacp)
- max模型怎么导入ue4_UE4模型导入流程,3DMAX贴图丢失问题解决方法
- 利用人性做大闸蟹,给予客户特殊的身份优越感,思维决定财富!
- 不一样的国外广告联盟与cpa赚钱!
- IOS免签支持在线封装app分发源码 免签封装带绿标
- 什么是绿色工厂,怎么进行绿色工厂认证
- 认认真真做事,踏踏实实做人
- 框架条理在学习生活中的重要性
- 菜鸟窝出品】数据清洗、python与sklearn数据标准化实战(附项目源码)
- linux学习课程从入门到精通:Centos8-系统进程管理
- 2019湖南对口升学计算机c语言试卷,2019年湖南省中等职业学校对口升学考试:计算机文化基础+计算机应用基础模拟试卷...
- Cartographer保存建图轨迹