题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1728

思路
BFS
一开始 从开始位置 往四周走 如果能走的话 这个时候 转弯次数都是0

我们的标记不是简单的标记

我们给每个已经访问过的位置 第一次访问时 我们将此时的转弯次数 赋值给它

当下一次 有其他状态 又来访问的时候,我们判断一下 之前已经标记的转弯次数 是比当前的大于等于吗 如果是 那么这个点 就可以继续走下去 如果不是 目前的这个状态就可以不要 相当于剪枝了

有几个坑点
输入的时候 坐标是从1-N 1-M 的

然后输入起始坐标的时候,, x 代表列 y 代表行

AC代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<list>
#include<stack>
#include <queue>#define CLR(a, b) memset(a, (b), sizeof(a))using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e2 + 5;int Move[4][2] =      // up 0  down 1 left 2 right 3
{-1, 0,  // up1, 0,  // down0,-1, // left0, 1, // right
};int n, m;int G[maxn][maxn];
int v[maxn][maxn];int sx, sy, ex, ey, limit;int ans;struct node
{int x, y;int step;int dis;
};bool ok(int x, int y, int step)
{if (x < 0 || x >= n || y < 0 || y >= m || G[x][y] == 0 || v[x][y] < step)return false;return true;
}void bfs()
{queue <node> q;node tmp;tmp.step = 0;v[sx][sy] = 1;for (int i = 0; i < 4; i++){tmp.x = sx + Move[i][0];tmp.y = sy + Move[i][1];tmp.dis = i;if (ok(tmp.x, tmp.y, tmp.step)){q.push(tmp);v[tmp.x][tmp.y] = tmp.step;}}while (!q.empty()){node u = q.front(), V;q.pop();if (u.x == ex && u.y == ey){if (u.step <= limit){ans = 1;return;}}if (u.step > limit)continue;for (int i = 0; i < 4; i++){V.x = u.x + Move[i][0];V.y = u.y + Move[i][1];if (u.dis != i)V.step = u.step + 1;else V.step = u.step;V.dis = i;if (ok(V.x, V.y, V.step)){q.push(V);v[V.x][V.y] = V.step;}}}}void init()
{CLR(G, 0);CLR(v, 0x3f);
}int main()
{int t;cin >> t;while (t--){init();scanf("%d%d", &n, &m);char c;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){scanf(" %c", &c);if (c == '.')G[i][j] = 1;elseG[i][j] = 0;}}scanf("%d%d%d%d%d", &limit, &sy, &sx, &ey, &ex);sx--, sy--, ex--, ey--;ans = 0;bfs();if (ans)printf("yes\n");elseprintf("no\n");}}

转载于:https://www.cnblogs.com/Dup4/p/9433105.html

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 1728 逃离迷宫【BFS】

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

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

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

  6. HDU 1728 逃离迷宫

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

  7. hdoj 1728 逃离迷宫

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

  8. HDU ACM 1728 逃离迷宫 (广搜BFS)

    http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:给出一张图,转弯数k,起点(x1,y1),(x2,y2)判断能不能最多只转k个弯时从起点走到终点 输 ...

  9. hdu_1728_逃离迷宫(bfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...

  10. 逃离迷宫 ( BFS /DFS)

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

最新文章

  1. React-Todos
  2. 【Python-ML】SKlearn库层次聚类凝聚AgglomerativeClustering模型
  3. 当前操作系统缺少黑体等字体_从零开始开发一个操作系统
  4. 利用Cache防止同一帐号重复登录
  5. 【Elasticsearch】我们如何将 100 秒的 elasticsearch 查询优化为不到一秒。
  6. struts2 s:property/标签的使用--输出时间格式转换
  7. Amazon验证码机器算法识别
  8. L1 - 闭包和原型链
  9. Leetcode 5182.删除一次得到子数组最大和
  10. 向英雄联盟生涯致敬,三十行Python代码爬取LOL官网英雄皮肤图片
  11. Makefile中的@
  12. 巫师3储物箱在哪_巫师三孤岩宝箱在哪 | 手游网游页游攻略大全
  13. iOS 获取汉字【简体中文】笔画数
  14. ES2015 Module(模块)
  15. 苹果的移动设备上跑flash
  16. 常见端口扫描原理总结
  17. 【Android】HAL层浅析
  18. 求一圈中留下的最后一个人
  19. 什么是recovery time和removal time?
  20. 你应该知道的setTimeout秘密

热门文章

  1. 可能有用的篡改检测常识
  2. C语言----整钱换零钱问题。把1元兑换成1分,2分,5分的硬币,共有多少种不同的兑换方法?(同理n元硬币的兑换方法呢?n元由用户输入)
  3. 阳明心学解析——心学本质关系连接
  4. cad没有命令输入框_cad2017命令输入框没了
  5. 三星推出体积更小的1亿像素图像传感器产品线
  6. Unity【Live Capture】- 关于人脸捕捉的解决方案(一)
  7. f检验matlab计算,F检验(F-Test)计算公式与在线计算器_三贝计算网_23bei.com
  8. Java中的求和公式_Sympy codegen:求和索引函数
  9. 对于上海交通大学网络安全专业21考研823的一些总结以及22考研专业课如何准备的想法
  10. KEGG信号通路富集分析