献给阿尔吉侬的花束(广搜)
(描述:
阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。
迷宫用一个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!
- 使用 pair 容器存放位置(x,y) #define x first #define y second
- bfs 广搜(队列)
- now 当前结点 ne下一结点 start 起始结点(pair<int, int>)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;#define x first //pair容器默认first,second
#define y secondconst int N=210;
int t,r,c;
char g[N][N];
int walk[N][N];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
typedef pair<int,int> PII;int bfs(PII start)
{queue<PII> p;p.push(start);memset(walk,0,sizeof(walk));walk[start.x][start.y]=0;while(p.size()){PII now=p.front();PII ne;p.pop();for(int k=0;k<4;k++){ne.x=now.x+dx[k],ne.y=now.y+dy[k];if(ne.x>=0&&ne.x<r&&ne.y>=0&&ne.y<c&&walk[ne.x][ne.y]==0&&g[ne.x][ne.y]!='#'){walk[ne.x][ne.y]=walk[now.x][now.y]+1;if(g[ne.x][ne.y]=='E')return walk[ne.x][ne.y];else p.push(ne);}}}return -1; //注意一定要返回-1,代表不能到达终点
}int main()
{cin>>t;while(t--){cin>>r>>c;PII start;for(int i=0;i<r;i++){cin>>g[i];for(int j=0;j<c;j++){if(g[i][j]=='S'){start={i,j};}}}int res=bfs(start);if(res==-1) cout<<"oop!"<<endl;else cout<<res<<endl; }return 0;
}
献给阿尔吉侬的花束(广搜)相关推荐
- 信息学奥赛一本通 1256:献给阿尔吉侬的花束 | OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束
[题目链接] ybt 1256:献给阿尔吉侬的花束 OpenJudge NOI 2.5 7218:献给阿尔吉侬的花束 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 设结构体 ...
- 1101. 献给阿尔吉侬的花束
1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的 ...
- 【蓝桥杯练习--BFS】1101. 献给阿尔吉侬的花束
1101. 献给阿尔吉侬的花束 ps:你敢信,这长长的代码就是大佬口中很简单地.非常惬意地写出来的,我也想拥有这种惬意呜呜呜呜 大佬说这种题是有规律的 我要开始找了 本题中的状态就是每个单独的格子 思 ...
- 【信息学奥赛一本通】1256:献给阿尔吉侬的花束
传送门:献给阿尔吉侬的花束 我的哔哩哔哩账号 1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1696 通过数: 685 [题 ...
- 信息学奥赛一本通(1256:献给阿尔吉侬的花束)
1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 7427 通过数: 3067 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...
- 1256:献给阿尔吉侬的花束
1256:献给阿尔吉侬的花束 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9651 通过数: 4023 [题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠, ...
- AcWing 1101. 献给阿尔吉侬的花束【BFS】
题目链接:AcWing 1101. 献给阿尔吉侬的花束 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点 ...
- #009#献给阿尔吉侬的花束
前言 日志,各位看官就当乐子看吧. 正经人谁写日记啊?!! --鹅城县长 不用想乱七八糟的,写就完事儿了.今天没背八股文.(确实是因为看不下去题,没成就感) VideosTV 地址:https://g ...
- BFS-Acwing-1101. 献给阿尔吉侬的花束
BFS-Acwing-1101. 献给阿尔吉侬的花束 题目: 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就 ...
- AcWing 1101. 献给阿尔吉侬的花束
AcWing 1101. 献给阿尔吉侬的花束 题目链接 题目描述 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫. 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点 ...
最新文章
- Android中BroadcastReceiver
- python正则匹配日期2019-03-11_都2019年了,正则表达式为啥还是这么难?这里的Python学习教程教你搞定!...
- php做一个微信退款,PHP实现微信申请退款流程实例代码
- java线程和操作系统线程_操作系统中的线程
- C# 读取EXCEL文件的三种经典方法
- [ios] NSSet,NSMutableSet[zhuan]
- pytorch保存.pth文件
- vue中使用leaflet加载地图影像并拾取坐标点
- Shell判断路径是否存在
- 进入mariadb_MariaDB基础操作
- Android锁屏勒索病毒分析(4)秒抢红包
- 《Effective C++》笔记
- Hbuilder X 语法助手无法访问问题
- 比尔·盖茨退位 | 历史上的今天
- [考试反思]0909csp-s模拟测试41:反典
- 一个java游戏有各种天书三国,机号申请的网络游戏,天书九卷,这游戏是免 的,里...
- 走钢索的人---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十七)[转]...
- iVX无代码挑战五秒游戏制作
- 直接修改class文件的方式
- ABP VNext学习日记7