hdu1728 逃离迷宫---转弯次数不超过k+BFS
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1728
题目大意:
给你一幅图,给出起点终点和最大转弯次数,判断是否能从起点到终点。‘*‘表示障碍物。
思路:
刚看到题目的时候有人会立刻想到对四个方向一步一步进行 BFS, 其实这样是不行的 , 因为当从两条路径 BFS 到同一点的时候 , 要选择其中一个继续 BFS, 如果转弯数都相同的话 , 就很难判断哪条路径有可能通向终点 . 所以 , 这种方法行不通 .
而这题的解法就是对四个方向 BFS, 但不是一步一步 , 也就是搜一个方向的时候一直搜索到沿这个方向能走到的尽头 , 这样搜的话 , 能够保证搜过的路径的转弯次数都是最小的 ( 因为这是基于转弯次数从 0 到 k 的 BFS).
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
typedef long long ll;
const int INF = <<;
const int maxn = ;
int T, cases;
int n, m, k, x1, y1, x2, y2;
char Map[][];
bool vis[][];
int dir[][] = {,,,,-,,,-};
struct node
{
int x, y, time;
node(){}
node(int x, int y, int time):x(x), y(y), time(time){}
};
bool judge(int x, int y)
{
return (x >= && x < n && y >= && y < m && !vis[x][y] && Map[x][y] == '.');
}
void bfs()
{
queue<node>q;
q.push(node(x1, y1, -));//-1表示起点
while(!q.empty())
{
node a = q.front();
q.pop();
if(a.time > k)break;
if(a.x == x2 && a.y == y2)
{
printf("yes\n");
return;
}
vis[a.x][a.y] = ;
//vis放在这里是因为一个位置可能多次经过,因为从不同方向上,但是拿出队列之后就一定不能再次经过了
for(int i = ; i < ; i++)
{
int xx = a.x + dir[i][];
int yy = a.y + dir[i][];
while(judge(xx, yy))//往一个方向走到底
{
q.push(node(xx, yy, a.time + ));
xx += dir[i][];
yy += dir[i][];
}
}
}
printf("no\n");
return;
}
int main()
{
cin >> T;
while(T--)
{
memset(vis, , sizeof(vis));
cin >> n >> m;
for(int i = ; i < n; i++)cin >> Map[i];
cin >> k >> y1 >> x1 >> y2 >> x2;
x1--, y1--, x2--, y2--;
bfs();
}
}
hdu1728 逃离迷宫---转弯次数不超过k+BFS的更多相关文章
- hdu1728逃离迷宫 (利用最短路径思想+优先队列(BFS))
Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...
- DFS(5)——hdu1728逃离迷宫
一.题目回顾 题目链接:逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地 ...
- Hdu1728 逃离迷宫 2017-01-17 10:56 81人阅读 评论(0) 收藏
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- hdu1728 逃离迷宫
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...
- hdu1728 逃离迷宫bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1728/ 关于广度优先搜索的第一篇题解.广度优先搜索,就是状态树的层次遍历,一层一层的搜索,直到搜索到目标状态为止 ...
- HDU 5056 Boring count(不超过k个字符的子串个数)
Boring count Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- hdu 1728 迷宫 给定最大转弯次数 (BFS)
给出起点 终点 以及转弯次数 在<=转弯次数的条件 能否走到终点 Sample Input25 5...** // .可走 *不可走*.**...........*....1 1 1 1 3 / ...
- hdu 1728:逃离迷宫(DFS,剪枝)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1728:逃离迷宫(BFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有 ...
随机推荐
- 1-3 hibernate核心对象关系映射 xxx.hbm.xml
详见 http://www.cnblogs.com/biehongli/p/6532800.html 1 <?xml version="1.0" encoding='utf ...
- MySQL数据库学习二 MSQL安装和配置
2.1 下载和安装MySQL软件 2.1.1 基于客户端/服务器(C/S)的数据库管理系统 服务器:MySQL数据库管理系统 客户端:操作MySQL服务器 2.1.2 MySQL的各种版本 社区版(C ...
- iOS 10.10 10.11 10.12 安装升级CocoPods
CocoPods简介 CocoaPods是一个用Ruby写的,负责管理iOS以及OSX系统下的一个第三方类库管理工具,通过CocoaPods,我们可以集中,统一的管理第三方开源库.当然这些库徐亚Coc ...
- Struct_2路径问题
今天在自学那个Struct2的知识点的时候,发现那个相对路径和绝对路径有点遗忘.特地去看了视频还有在百度上查了一些资料.我觉得这个路径问题对于我这个初学者来说还是有点容易遗忘的.所以,今天就添加这个新 ...
- SSDB安装配置 ERROR! autoconf required! install autoconf first
SSDB简介 SSDB是一个C/C++语言开发的高性能开源NoSQL数据库服务器,支持Key-value, Keyhashmap, Key-zset(sorted set) 等数据结构,十分适合存储数 ...
- spring框架学习笔记4:SpringAOP实现原理
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...
- 忘记oracle的sys密码该如何重置;附如何修改oracle数据库用户密码
参考博客:http://blog.itpub.net/26015009/viewspace-717505/ 这里只说一种方法:使用ORAPWD.EXE 工具修改密码 打开命令提示符窗口,输入如下命令: ...
- 每日冲刺报告——Day2(Java-Team)
第二天报告(11.3 周五) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://git ...
- 20162330 第10周 MySort实验
关于MySort的进一步实践 课堂作业题目如下: 模拟实现Linux下Sort -t : -k 2的功能.参考Sort的实现.提交码云链接和代码运行截图. import java.util.*; pu ...
- Java面试题合集(一)
接下来几篇文章准备系统整理一下有关Java的面试题,分为基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中. 其他方面如前端后端等等的面试题也在整理中,都会有的. 所 ...