【题目描述 - Problem Description】

  给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去。令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的。我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可以选择4个方向的任何一个出发,而不算成一次转弯。gloria能从一个位置走到另外一个位置吗?

【输入 - Input】

【输出 - Output】

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

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

【输入样例 - Sample Input】

【输出样例 - Sample Output】

2
5 5
...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5
...**
*.**.
.....
.....
*....
2 1 1 1 3

no
yes

【题解】

  因为自己这方面只会DFS和SPFA,据说这道题是BFS,而且BFS和SPFA同源?所以就来试试

  把起点标记为-1,周围4个方向能刷新则无脑刷新成0,保存被刷新的点进队列,以此类推……

  当前点的数值达到K的时候就可以停止刷新了,因为前面刷新的值都<=k,后面没必要继续了。

【代码 C++】

 #include<cstdio>
#include<cstring>
#include<queue>
char map[][];
int k;
struct point{
int x, y;
}temp;
std::queue<point> que;
void mark(int nowX, int nowY, int fX, int fY){
int len = map[nowY][nowX] + ;
while (map[nowY + fY][nowX + fX] != '*' && len <= map[nowY + fY][nowX + fX]){
nowY += fY, nowX += fX, map[nowY][nowX] = len;
temp.y = nowY, temp.x = nowX, que.push(temp);
}
}
int main(){
int t, stX, stY, edX, edY, lX, lY, i;
scanf("%d", &t);
memset(map, '*', sizeof(map));
while (t--){
scanf("%d%d", &lY, &lX), getchar();
++lX;
for (i = ; i <= lY; ++i) gets(&map[i][]), map[i][lX] = '*';
memset(map[i], '*', sizeof(map[i]));
scanf("%d%d%d%d%d", &k, &stX, &stY, &edX, &edY);
while (!que.empty()) que.pop();
if (map[stY][stX] != '*'){
map[stY][stX] = -;
temp.x = stX, temp.y = stY, que.push(temp);
}
while (!que.empty()){
temp = que.front(), stX = temp.x, stY = temp.y;
if (map[stY][stX] >= k) break;
mark(stX, stY, , );
mark(stX, stY, , -);
mark(stX, stY, , );
mark(stX, stY, -, );
que.pop();
}
if (map[edY][edX] <= k) puts("yes");
else puts("no");
}
return ;
}

HDU 1728

HDU 1728 逃离迷宫的更多相关文章

  1. hdu 1728 逃离迷宫 bfs记转向

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  2. hdu 1728 逃离迷宫 bfs记步数

    题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Mem ...

  3. HDU 1728 逃离迷宫(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)  ...

  4. HDU 1728 逃离迷宫(DFS经典题,比赛手残写废题)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 1728 逃离迷宫 [ dfs ]

    传送门 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. hdu 1728:逃离迷宫(DFS,剪枝)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. HDU 1728 逃离迷宫(DFS||BFS)

    逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...

  8. hdu 1728 逃离迷宫 (BFS)

    逃离迷宫 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  9. hdu - 1728逃离迷宫 && hdu - 1175 连连看 (普通bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 这两道题花了一下午的时候调试,因为以前做过类似的题,但是判断方向的方法是错的,一直没发现啊,真无语. 每个 ...

随机推荐

  1. EL表达式,JSTL:jsp standard Tag Library

    1.EL表达式的作用: 1.1访问Bean的属性.  方式一:${对象名 . 属性名} eg:${user.name}    方式二:${对象名["属性名"]} 1.2输出简单的运 ...

  2. JProfiler入门笔记

    看链接:http://blog.csdn.net/chendc201/article/details/22897999 收集一下.

  3. LR场景设置里的各参数解释

    1.Start Vuser ep1: Strat 100 Vusers :2 every 00:00:15(HH:MM:SS) 解释: 场景总共要跑100个虚拟用户,每15秒启动2个虚拟用户Vuser ...

  4. C# 探索c#之Async、Await剖析

    探索c#之Async.Await剖析 作者:蘑菇先生 出处:http://mushroom.cnblogs.com/

  5. [转]Win7下安装配置sharepoint server 2010

    转自:http://blog.sina.com.cn/s/blog_5d93d7aa010151lp.html 要开发SharePoint 2010应用程序,开发人员必须构建一个SharePoint ...

  6. oracle ORA-12519,TNS:no appropriate service handler found的

    select count(*) from v$process --当前的连接数 select value from v$parameter where name = 'processes' --数据库 ...

  7. MyISAM表杂记实验

    一.本文说明 由于刚学mysql所以动手做了一些实验. 二.实验内容 1.验证MyISAM有AUOT_INCREMENT coloumn功能 ----在这里是对现有表t,增加一个主键----mysql ...

  8. 如何为github上的项目添加gif效果图

    一.制作gif图片 如何制作可以参考: http://www.jianshu.com/p/27ec6375b8ab?utm_campaign=maleskine&utm_content=not ...

  9. mysql语句

    查询字段长度:SELECT MAX(LENGTH(pd)) FROM `table` where id=2;来检查当前表中字段的字符集设置.show full fields from tableNam ...

  10. sql排序 去除默认升降序排序case方法////遍历数据库所有表及统计表数据总数

    case排序法: end 还有EXEC法 可以网上查 SQLServer遍历数据库所有表及统计表数据总数: DECLARE @TableName varchar(); CREATE TABLE #Ge ...