HDU 1728 优化的BFS
题目链接: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相关推荐
- hdu 1728 逃离迷宫 (bfs)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU - 1728 逃离迷宫(bfs)
题目链接:点击查看 题目大意:给出起点和终点和最多的拐弯次数k,问拐弯次数能否在小于等于k的情况下从起点到达终点 题目分析:bfs,不过和以往的不太一样,以往的bfs都是每次加入一个点,而这个题目的限 ...
- HDU 1728 逃离迷宫(BFS的优化)
这一题,有两个地方需要注意:(除了题目令人窒息的行列的x y设置) ①转弯如何判断? 需要给转弯的方向赋值.通常,我们在节点向四个方向延伸的时候,喜欢这样 int nextx[4]={0,0,-1,1 ...
- HDU - 1495 非常可乐(BFS,数学)
HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...
- HDU 1728 逃离迷宫【BFS】
题意:给出一个起点,一个终点,规定的转弯次数,问能否在规定的转弯次数内到达终点--- 这一题是学(看)习(题)的(解)@_@ 主要学了两个地方 一个是剪枝,如果搜到的当前点的转弯次数小于该点turn数 ...
- HDU - 5335 Walk Out(bfs+路径输出+贪心)
题目链接:点击查看 题目大意:给出一个矩阵,要求从(1,1)点走到(n,m)点,要求途径数字依次组成的二进制数字最小 题目分析:这个题我的心路历程真的是非常坎坷的,就来稍微记录一下吧,或许对以后做题能 ...
- HDU 2653 (记忆化BFS搜索+优先队列)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...
- 区域判断hdu 3681 Prison Break bfs+二分+dp
时间紧张,先记一笔,后续优化与完善. 这个是2010杭州区域赛的目题. bfs出最短路,二分谜底,dp判断可行性. #include <iostream> #include <cst ...
- hdu 1728 逃离迷宫(dFS+优先队列)
求转弯最少的走路方式!!!! #include<stdio.h> #include<string.h> #include<queue> using namespac ...
- HDU 4856 Tunnels(BFS+状压DP)
HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...
最新文章
- 历届智能车哪个组别最难,哪个竞争最激烈?
- 小波变换教程(1):基本原理
- hadoop job 数量_Hadoop job任务分配
- 人工智障学习笔记——机器学习(2)线性模型
- html关于计时的函数,关于JavaScript获取时间函数及实现倒计时
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】...
- 对于IDEA 导入eclipse项目后 没有办法启动部署 以及javax.servlet.http不存在
- 整人VBS\BAT代码 ② 整蛊系列→可参考
- p6spy mysql8_P6Spy配置使用
- 公积金贷款额度根据什么而定
- python爬取图片失败显示404_django使用图片延时加载引起后台404错误
- [MATLAB]从键盘输入一个带有字母构成的字符串,要求大写变小写,小写变大写输出。
- 【bluestacks】蓝叠模拟器hyper-v版本提示hyper-v inaccessible
- word对齐表格不在一行的文字
- 如何将AD类型的封装导成Allegro库中的封装
- Shader学习之Cg语言一(Cg语言概述)
- 【数据结构】红黑树入门知识
- 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现
- Spring Cloud 微服务开放平台接口
- 会python_20小时学会Python,可能吗?
热门文章
- WiFi 802.11可调参数说明---电源管理调整(聆听间隔/DTIM/ATIM)
- 快速pow算法c语言_c语言pow(c语言中用pow算法求)
- 什么是PLC的响应时间
- 米家的扫地机器人是灰色_重新定义扫地机器人概念——米家扫地机器人 - IT168试客...
- activity 工作流引擎-流程表介绍
- 淘宝天猫自动抢购插件下载-开发学习
- cdn回源php_CDN回源、网站解析 是什么意思?
- jpg图片怎么压缩大小?简单快捷的方法教给你
- python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args)
- 图片base64解码转换