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!

代码如下:

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int,int>PII;
#define x first
#define y second
const int N = 210;
int n,m;
int dx[] = {0,0,1,-1},dy[] = {1,-1,0,0};
char g[N][N];
int dis[N][N];
int bfs(PII start,PII end)
{memset(dis,-1,sizeof(dis));queue<PII> q;dis[start.x][start.y] = 0;q.push(start);while(q.size()){PII t = q.front();q.pop();for (int i = 0;i<4;i++){int x = t.x+dx[i],y = t.y+dy[i];if ( x< 0 || x>=n || y <0 || y>= m ) continue;if (g[x][y]=='#') continue;if (dis[x][y]!=-1) continue;dis[x][y] = dis[t.x][t.y]+1;if (end == make_pair(x,y)) return dis[x][y];q.push({x,y});}}return -1;
}int main()
{int cnt;cin>>cnt;while(cnt--){PII start,end;cin>>n>>m;for (int i = 0;i<n;i++)scanf("%s",g[i]);for (int i = 0;i<n;i++)for (int j = 0;j<m;j++)if (g[i][j]=='S') start = {i,j};else if (g[i][j]=='E') end = {i,j};int distance = bfs(start,end);if (distance!=-1){cout<<distance<<endl;}else{cout<<"oop!"<<endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构---关键路径

数据结构—关键路径 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include "stack.h" #define typeNode int //每个头结点的标识数据类型 #define N 100 //最大结点数 int degree[N];//结点入度数,通过…

Kubernetes AIOps解决方案商 Carbon Relay获6300万美元A轮融资

每10家企业中就有4家报告说他们正在使用Kubernetes&#xff0c;Kubernetes是开放源代码容器编排框架&#xff0c;用于在生产环境中自动化应用程序的部署&#xff0c;扩展和管理。但是&#xff0c;诸如管理复杂性&#xff0c;部署时间和无法预料的错误之类的挑战可能会降低生产率…

python结束线程_2018-01-02 如何优雅地终止python线程

前言 零 我们知道&#xff0c;在python里面要终止一个线程&#xff0c;常规的做法就是设置/检查 --->标志或者锁方式来实现的。 这种方式好不好呢&#xff1f; 应该是不大好的&#xff01;因为在所有的程序语言里面&#xff0c;突然地终止一个线程&#xff0c;这无论如何都…

AcWing 1113. 红与黑

有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻&#xff08;上下左右四个方向&#xff09;的黑色瓷砖移动。 请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 输入格式 输入包括…

SkyWalking学习笔记(Window环境 本地环境)

基于 Windows 环境使用 SkyAPM-dotnet 来介绍一下 SkyWalking&#xff0c; SkyAPM-dotnet 是 SkyWalking 的 .NET Agent环境要求JDK8Elasticsearch8080,9200,10800,11800,12800 端口不被占用Elasticsearch安装Elasticsearch下载安装 参考官方教程.Elasticsearch下载安装官方教程…

word List16

word List16 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

python二分法求方程的根_Python查找函数f(x)=0根的解决方法

线性代数分享方程f(x)0的根 函数F(x)0的重根与F(x)0的根有什么关系&#xff1f;有些人一旦错过了&#xff0c;就是一辈子不再主动联系&#xff0c;不愿打扰你的生活&#xff0c;连偶尔的寒暄都没有&#xff0c;成长就是这样的&#xff0c;不断的告别&#xff0c;不断的遇见。 请…

[蓝桥杯2015决赛]穿越雷区-bfs

题目描述 X星的坦克战车很奇怪&#xff0c;它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转&#xff0c;否则将报废。 某坦克需要从A区到B区去&#xff08;A&#xff0c;B区本身是安全区&#xff0c;没有正能量或负能量特征&#xff09;&#xff0c;怎样走才能路径…

word List 17

word List 17 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

pb 如何导出csv_如何计算指数温度?

指数温度的高低与价格高低没有必然的联系&#xff0c;指数温度的高低反映的是在历史中低于指数当前估值出现的概率。温度越低说明在历史上低于当前估值的概率越小&#xff0c;指数的价值越被低估&#xff0c;上涨的概率越大&#xff1b;温度越高说明在历史上低于当前估值的概率…

[蓝桥杯]地宫取宝

X 国王有一个地宫宝库&#xff0c;是 nm 个格子的矩阵&#xff0c;每个格子放一件宝贝&#xff0c;每个宝贝贴着价值标签。 地宫的入口在左上角&#xff0c;出口在右下角。 小明被带到地宫的入口&#xff0c;国王要求他只能向右或向下行走。 走过某个格子时&#xff0c;如果…

算法问题---两艘船是否有最大承载量

算法问题—两艘船是否有最大承载量 代码&#xff1a; 栈代码&#xff1a; #pragma once #include<stdio.h> #define maxSize 100 typedef struct stack {int * base;int * top; }stack; bool init(stack & Stack) {//栈的初始化Stack.base new int[maxSize];if (…

python标准库time_Python 标准库之时间篇

写在之前 大家好&#xff0c;这是首发在我公众号「Python空间」的第 69 篇文章&#xff0c;欢迎关注&#xff0c;期待和你的交流。 在昨天的文章&#xff08;Python 标准库之日期&#xff09;中我们学习了 Python 标准库中「日期 & 时间」中的「日期」&#xff0c;本来想昨…

《ASP.NET Core 微服务实战》-- 读书笔记(第12章)

第 12 章 设计汇总微服务开发并不是要学习 C#、Java 或者 Go 编程--而是要学习如何开发应用以适应并充分利用弹性伸缩环境的优势&#xff0c;它们对托管环境没有偏好&#xff0c;并能瞬间启停换句话说&#xff0c;我们要学习如何开发云原生应用识别并解决反模式我们既然已经学习…

[蓝桥杯2017初赛]纸牌三角形-枚举permutation+数论

题目描述 A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形&#xff08;A按1计算&#xff09;。要求每个边的和相等。 下图就是一种排法这样的排法可能会有很多。 如果考虑旋转、镜像后相同的算同一种&#xff0c;一共有多少种不同的排法呢&#xff1f; 输出 输出一个整数表示答…

算法----最大承载量下的最大价值问题

算法----最大承载量下的最大价值问题 代码&#xff1a; 栈代码&#xff1a;&#xff08;存储哪些是需要的价值物&#xff09; #pragma once #include<stdio.h> #define maxSize 100 typedef struct stack {int * base;int * top; }stack; bool init(stack & Stack…

oracle多条件分组统计_多条件统计,就必须用Ifs系列函数,绝对的高能!

数据统计&#xff0c;我们并不陌生&#xff0c;但是在实际的工作或应用中&#xff0c;数据统计都是附加条件的&#xff0c;而且大多情况下是“多条件”的&#xff0c;此时&#xff0c;我们必须掌握“Ifs”系列函数。一、多条件判断&#xff1a;Ifs函数。功能&#xff1a;判断指…

AcWing 895. 最长上升子序列

给定一个长度为N的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数&#xff0c;表示完整序列。 输出格式 输出一个整数&#xff0c;表示最大长度。 数据范围 1≤N≤1000&#xff0c; −10^9≤数列中的数≤ 10…

word List18

word List18 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)

高维映射跟核方法的概念很容易混淆。高维映射通过将样本从原始空间映射到一个更高维的特征空间&#xff0c;从而解决了低纬下难以解决的问题。核方法往往跟高维映射配合使用&#xff0c;可以看做是一种技巧&#xff0c;可以通过它来避免这种映射的计算。下面详细介绍一下这两个…