秋招每日一题T15——逃离迷宫

本文介绍了一道编程题目,要求在给定的迷宫中判断gloria能否从一个位置到另一个位置,最多允许k次转弯。迷宫由空地和障碍物构成,采用广度优先搜索(BFS)解决。通过判断相邻位置的方向变化来计算转弯次数,确保不超出限制。
摘要由CSDN通过智能技术生成

题目描述

给定一个 m×n (m 行, n 列)的迷宫,迷宫中有两个位置,gloria 想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria 可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的 4 个位置中,当然在行走过程中,gloria 不能走到迷宫外面去。

令人头痛的是,gloria 是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。

我们假定给定的两个位置都是空地,初始时,gloria 所面向的方向未定,她可以选择 4 个方向的任何一个出发,而不算成一次转弯。

gloria 能从一个位置走到另外一个位置吗?

输入格式
第 1 行为一个整数 T,表示测试数据的个数,接下来为 T 组测试数据,每组测试数据中,

第 1 行为两个整数 m,n,分别表示迷宫的行数和列数,接下来 m 行,每行包括 n 个字符,其中字符 . 表示该位置为空地,字符 * 表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为 5 个整数 k,x1,y1,x2,y2,其中 k 表示 gloria 最多能转的弯数,(x1,y1),(x2,y2) 表示两个位置,其中 x1,x2 对应列,y1,y2 对应行。

输出格式
每组测试数据对应为一行,若 gloria 能从一个位置走到另外一个位置,输出 yes,否则输出 no。

数据范围
1≤T≤100,
1≤m,n≤100,
1≤k≤10,
1≤x1,x2≤n,
1≤y1,y2≤m,
保证给定的两个位置不同,且一定是空地。
在这里插入图片描述

思路

〇这是一道来自中南大学考研复试的机试题。
①使用dfs可解,但需要优化,因此使用bfs更直观。注意题目中的大坑:其中 x1,x2 对应列,y1,y2 对应行。
②难点在于如何判断是否转弯,此处再现妙手:由于转向使使用的方向数组有四个方向,需要用i来遍历,因此干脆用i来代表方向,即,从一个位置来的点有四种方向的可能,如果接着放下走的方向i与上一个点的方向dir匹配,说明没有转弯。
③剩下的就是朴素的bfs。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 105;
char g[maxn][maxn];
int dis[maxn][maxn];
int t,n,m,k;
struct xyk{
   
	int x,y,dir,cnt;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值