博客
关于我
AcWing-1101.献给阿尔吉侬的花束。
阅读量:133 次
发布时间:2019-02-27

本文共 1321 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

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

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

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

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

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

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

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

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

…E.

输出样例:

5
1
oop!

BFS

#include
using namespace std;int n,m,sx,sy,ex,ey;int dx[]={ 0,1,0,-1},dy[]={ 1,0,-1,0};struct node{ int x; int y; int step;};const int N=250;char a[N][N];bool vis[N][N];node p,xx;int bfs(){ queue
q; q.push(p); vis[p.x][p.y]=1; while(!q.empty()) { xx=q.front(); q.pop(); if(xx.x==ex&&xx.y==ey) return xx.step; for(int i=0;i<4;i++) { int xx1=xx.x+dx[i]; int yy1=xx.y+dy[i]; if(xx1>=0&&xx1
=0&&yy1
>t; while(t--) { memset(vis,false,sizeof(vis)); cin>>n>>m; for(int i=0;i
>a[i][j]; if(a[i][j]=='S') { sx=i; sy=j; } else if(a[i][j]=='E') { ex=i; ey=j; } } } p.x=sx; p.y=sy; p.step=0; int h=bfs(); if(h!=-1) cout<
<

转载地址:http://dumb.baihongyu.com/

你可能感兴趣的文章
mysql where中如何判断不为空
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
Mysql 中的日期时间字符串查询
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>