杭电 逃离迷宫 BFS
Input 第1行为一个整数t (1 ≤ t ≤ 100),表示测试数据的个数,接下来为t组测试数据,每组测试数据中,
第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x 1, y 1, x 2, y 2 (1 ≤ k ≤ 10, 1 ≤ x1, x 2 ≤ n, 1 ≤ y 1, y 2 ≤ m),其中k表示gloria最多能转的弯数,(x 1, y 1), (x 2, y2)表示两个位置,其中x 1,x 2对应列,y 1, y 2对应行。
Output 每组测试数据对应为一行,若gloria能从一个位置走到另外一个位置,输出“yes”,否则输出“no”。Sample Input
2
5 5
...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5
...**
*.**.
.....
.....
*....
2 1 1 1 3
Sample Output
no
yes
这个题目在搜索题目中应该是一个比较难的题目了,做法就是讲BFS当DFS用
传统的BFS一般情况下用来计算从一个点到另外一个点的最短路径之类的问题,但是这个题目让求最短的转弯次数,思路就是 沿着一个方向一致走 ,我遍历完该方向的所有点,当与到终点是直接输出转弯次数。
AC代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct stu{
int a,b,c;//分别指点的坐标与当前转弯次数
}e1,e2,e3;
int d[][]={{,},{,},{-,},{,-}};//四个方向,一定要对四个方向中,沿着每一个方向走,, 直到撞墙
int mark[+][+];
char arr[+][+];
int n,m;
int k,x1,y1,x2,y2; int bfs(){
queue<stu>que;
que.push({x1,y1,-});//初始转弯为-1,因为第一次转弯不计数
mark[x1][y1]=;//初识标记 while(que.size()){
int xx=que.front().a;
int yy=que.front().b;
int zz=que.front().c;
que.pop();
if(zz>=k) break;//这里为什么直接跳出呢,因为我们用bfs队列中存储的都是最少的转弯次数,如果转弯次数为k但是没有到终点,以后的转弯次数只会越来越来大,所以要跳出 for(int i=;i<;i++){
int dx=xx+d[i][];
int dy=yy+d[i][];
int cnt=zz+;//转弯次数加一,每一个方向Zz是不变的,,所以在每个方向cnt是相等的
while(){//一直走
if(dx>=&&dx<=n&&dy>=&&dy<=m&&arr[dx][dy]=='.')//判断越界等
{
if(dx==x2&&dy==y2)//终点直接输出,,不用判断转弯次数,因为我们前边加了个if(zz>=k) break;所以cnt最大为k
{
return ;
}
if(mark[dx][dy]==){
mark[dx][dy]=;
que.push({dx,dy,cnt});
}
dx=dx+d[i][];//因为一直沿着i这个方向走,所以只改变dx与dy的值就好了
dy=dy+d[i][];
}
else break;
}
}
}
return ;
} int main()
{
int t;
cin>>t;
while(t--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
cin>>arr[i][j];
}
scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2);
memset(mark,,sizeof(mark));
if(bfs())
puts("yes");
else puts("no");
}
return ;
}
杭电 逃离迷宫 BFS的更多相关文章
- hdu 1728 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- hdu 1728 逃离迷宫 bfs记转向
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- hdu 1728 逃离迷宫 bfs记步数
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
- hdu_1728_逃离迷宫(bfs)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...
- 胜利大逃亡(杭电hdu1253)bfs简单题
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 非常可乐(杭电hdu1495)bfs
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1728 逃离迷宫 BFS题
题目描述:输入一个m*n的地图,地图上有两种点,一种是 . 表示这个点是空地,是可以走的,另一种是 * ,表示是墙,是不能走的,然后输入一个起点和一个终点,另外有一个k输入,现在要你确定能否在转k次弯 ...
- hdu 1728 逃离迷宫 BFS加优先队列 DFS()
http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意就是能否在规定的转弯次数内从起点走到终点.刚走时那步方向不算. 只会bfs(),但想到这题需要记录转弯 ...
- hdu1728 逃离迷宫bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/ 关于广度优先搜索的第一篇题解.广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止 ...
随机推荐
- In Triangle Test / To Left Test
2020-01-09 14:51:29 如何高效的判断一个点是否是包含在一个三角形的内部是计算几何里的一个基础问题. In Triangle Test问题也可以用来解决计算几何里的一个基础问题就是 凸 ...
- 网维大师重建B盘方法
[操作步骤]操作前先熟悉步骤,以免手忙脚乱.请在人少的时候操作. 1.打开网维大师安装目录,进入barserver\找到barserver.ini打开,找到[PlatformUpdate]字段下的up ...
- java获取不同时段
当前时间: long currentime= System.currentTimeMillis(); 本周第一天0时: Long weekstart = current.withDayOfWeek(1 ...
- excel导出功能
/* * 导出 add by faby on 20180918 */ public void export(){ HttpServletResponse response=ServletAct ...
- postman设置全局变量及参数化
笔者第一次记录使用过程,仅供参考 测试过程中接口的前缀都是一样的,所以我们可以将这个前缀作为全局变量来使用 首先,打开postman点击这里的小齿轮设置 在这里就可以进行变量的一个添加,添加好之后记住 ...
- TCP 的断包和粘包
以太网中存在一个对于帧的有效数据大小的限制,即 MTU,以太网的 MTU 为 1500 字节. 一.断包 就是说发送端一次发送的消息长度过大,如果超过了 MTU,那么 ip 会对其进行分片. 在网络编 ...
- gold 30min
- AutoCompleteTextView的简单使用
1.AutoCompleteTextView功能 自动完成文本框,由EditText派生而来,是一个文本编辑框,相较普通的文本编辑框多了提示功能,即用户输入一定数量的字符后,自动完成文本框会弹出一个下 ...
- Day19-apache
HTTPD(俗称apache) 简介:目前来说,Linuxweb服务器主要用apache与nginx. 1.web服务器的输入/输出结构: 单线程I/O结构 多线程I/O结构 复用的I/O结构,单个线 ...
- .Net 微服务架构技术栈的那些事
一.前言 大家一直都在谈论微服务架构,园子里面也有很多关于微服务的文章,前几天也有一些园子的朋友问我微服务架构的一些技术,我这里就整理了微服务架构的技术栈路线图,这里就分享出来和大家一起探讨学习,同时 ...