博客
关于我
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 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>