题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728

题目解析:BFS,加上转向次数计数和限制;
优化点:一次尽量不换方向走到不能走,保证第一个搜到的到达终点的次数最少

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>using namespace std;const int N = 105;char G[N][N];
bool vis[N][N];
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int n, m, limit, sx, sy, ex, ey;struct node {int x, y, step;
};bool check(int x, int y) {if (x >= 1 && x <= m && y >= 1 && y <= n && G[x][y] != '*')return true;elsereturn false;
}void bfs(int x, int y) {if (x == ex && y == ey) {printf("yes\n");return;}memset(vis, false, sizeof(vis));queue<node> que;node s;s.x = x;s.y = y;s.step = -1; //为了第一步不算换方向vis[x][y] = true;que.push(s);while (!que.empty()) {node tmp = que.front();que.pop();for (int i = 0; i < 4; i++) {node tmp2;tmp2 = tmp;tmp2.x += dir[i][0];tmp2.y += dir[i][1];while (check(tmp2.x, tmp2.y)) {if (!vis[tmp2.x][tmp2.y]) {vis[tmp2.x][tmp2.y] = true;tmp2.step = tmp.step + 1;if (tmp2.x == ex && tmp2.y == ey && tmp2.step <= limit) {printf("yes\n");return;}que.push(tmp2);}tmp2.x += dir[i][0];tmp2.y += dir[i][1];}}}printf("no\n");return;
}int main() {//  freopen("in.txt", "r", stdin);int t;scanf("%d", &t);while (t--) {scanf("%d%d", &m, &n);for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++) {cin >> G[i][j];}scanf("%d%d%d%d%d", &limit, &sy, &sx, &ey, &ex);bfs(sx, sy);}return 0;
}

HDU 1728 优化的BFS相关推荐

  1. hdu 1728 逃离迷宫 (bfs)

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

  2. HDU - 1728 逃离迷宫(bfs)

    题目链接:点击查看 题目大意:给出起点和终点和最多的拐弯次数k,问拐弯次数能否在小于等于k的情况下从起点到达终点 题目分析:bfs,不过和以往的不太一样,以往的bfs都是每次加入一个点,而这个题目的限 ...

  3. HDU 1728 逃离迷宫(BFS的优化)

    这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...

  4. HDU - 1495 非常可乐(BFS,数学)

    HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...

  5. HDU 1728 逃离迷宫【BFS】

    题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...

  6. HDU - 5335 Walk Out(bfs+路径输出+贪心)

    题目链接:点击查看 题目大意:给出一个矩阵,要求从(1,1)点走到(n,m)点,要求途径数字依次组成的二进制数字最小 题目分析:这个题我的心路历程真的是非常坎坷的,就来稍微记录一下吧,或许对以后做题能 ...

  7. HDU 2653 (记忆化BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...

  8. 区域判断hdu 3681 Prison Break bfs+二分+dp

    时间紧张,先记一笔,后续优化与完善. 这个是2010杭州区域赛的目题. bfs出最短路,二分谜底,dp判断可行性. #include <iostream> #include <cst ...

  9. hdu 1728 逃离迷宫(dFS+优先队列)

    求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...

  10. HDU 4856 Tunnels(BFS+状压DP)

    HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...

最新文章

  1. 历届智能车哪个组别最难,哪个竞争最激烈?
  2. 小波变换教程(1):基本原理
  3. hadoop job 数量_Hadoop job任务分配
  4. 人工智障学习笔记——机器学习(2)线性模型
  5. html关于计时的函数,关于JavaScript获取时间函数及实现倒计时
  6. JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】...
  7. 对于IDEA 导入eclipse项目后 没有办法启动部署 以及javax.servlet.http不存在
  8. 整人VBS\BAT代码 ② 整蛊系列→可参考
  9. p6spy mysql8_P6Spy配置使用
  10. 公积金贷款额度根据什么而定
  11. python爬取图片失败显示404_django使用图片延时加载引起后台404错误
  12. [MATLAB]从键盘输入一个带有字母构成的字符串,要求大写变小写,小写变大写输出。
  13. 【bluestacks】蓝叠模拟器hyper-v版本提示hyper-v inaccessible
  14. word对齐表格不在一行的文字
  15. 如何将AD类型的封装导成Allegro库中的封装
  16. Shader学习之Cg语言一(Cg语言概述)
  17. 【数据结构】红黑树入门知识
  18. 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现
  19. Spring Cloud 微服务开放平台接口
  20. 会python_20小时学会Python,可能吗?

热门文章

  1. WiFi 802.11可调参数说明---电源管理调整(聆听间隔/DTIM/ATIM)
  2. 快速pow算法c语言_c语言pow(c语言中用pow算法求)
  3. 什么是PLC的响应时间
  4. 米家的扫地机器人是灰色_重新定义扫地机器人概念——米家扫地机器人 - IT168试客...
  5. activity 工作流引擎-流程表介绍
  6. 淘宝天猫自动抢购插件下载-开发学习
  7. cdn回源php_CDN回源、网站解析 是什么意思?
  8. jpg图片怎么压缩大小?简单快捷的方法教给你
  9. python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args)
  10. 图片base64解码转换