Hdu 1072 【广搜】.cpp
题意:
给出一个n*m的矩阵,
0 表示不可走
1 表示可走
2 表示起点
3 表示终点
4 表示可走且走到这一步可以满血
某人一开始有6滴血,走一步少一滴..到0就死了..
可以走到4的位置满血再走..
求出最少走几步可以从起点到终点..
思路:
广搜,用一个cnt表示现在走了几步,一个cur表示现在的血量..
普通的广搜过程中如果已经走过就不可以再走了..但是第三个样例可以看出走过还可以再走..
因为普通广搜走过不能再走只是代表这个状态已经访问过了..不需要再次访问,防止死循环..
但是现在再次访问的时候因为血量已经不一样了.所以可以再走..
剩下就是正常广搜了..
Tips:
404..
Code:
1 #include <stdio.h> 2 #include <cstring> 3 #include <queue> 4 #include <algorithm> 5 using namespace std; 6 7 const int MAXN = 10; 8 const int INF = 0x1f1f1f1f; 9 10 struct Node 11 { 12 int x; 13 int y; 14 int cnt; 15 int cur; 16 }; 17 18 int dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0}; 19 int iCase, n, m; 20 int G[MAXN][MAXN], vis[MAXN][MAXN], dis[MAXN][MAXN]; 21 22 bool check(Node node) 23 { 24 return node.x >= 0 && node.x < n && node.y >= 0 && node.y < m && (!vis[node.x][node.y] || dis[node.x][node.y] < node.cur) && node.cur != 0; 25 } 26 27 /* 28 0 wall 29 1 nothing 30 2 start 31 3 end 32 4 reset 33 */ 34 35 int main() 36 { 37 // freopen("in.txt", "r", stdin); 38 bool flag; 39 Node ed, node, node1; 40 int ans; 41 scanf("%d", &iCase); 42 while (iCase--) { 43 memset(vis, false, sizeof(vis)); 44 memset(dis, INF, sizeof(dis)); 45 flag = false; 46 queue<Node> Q; 47 scanf("%d %d", &n, &m); 48 for (int i = 0; i < n; ++i) 49 for (int j = 0; j < m; ++j) { 50 scanf("%d", &G[i][j]); 51 if (G[i][j] == 2) { 52 node.x = i, node.y = j; 53 node.cnt = 0; 54 node.cur = 6; 55 Q.push(node); 56 dis[i][j] = node.cur; 57 vis[i][j] = true; 58 } else if (G[i][j] == 3) 59 ed.x = i, ed.y = j; 60 else if (G[i][j] == 0) 61 vis[i][j] = true; 62 } 63 while (!Q.empty()) { 64 node = Q.front(); 65 if (node.x == ed.x && node.y == ed.y) { 66 ans = node.cnt; 67 flag = true; 68 break; 69 } 70 Q.pop(); 71 for (int i = 0; i < 4; ++i) { 72 node1.x = node.x+dir[i][0]; 73 node1.y = node.y+dir[i][1]; 74 node1.cnt = node.cnt+1; 75 node1.cur = node.cur-1; 76 if (check(node1)) { 77 if (G[node1.x][node1.y] == 4) node1.cur = 6; 78 dis[node1.x][node1.y] = node.cur; 79 Q.push(node1); 80 vis[node1.x][node1.y] = true; 81 } 82 } 83 } 84 if (flag) printf("%d\n", ans); 85 else puts("-1"); 86 } 87 return 0; 88 }
View Code
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072
转载于:https://www.cnblogs.com/Griselda/archive/2013/06/06/3122681.html
Hdu 1072 【广搜】.cpp相关推荐
- POJ 3278 / hdu 2717 Catch That Cow (广搜)
POJ 3278 HDU 2717 广搜题,用一个数组标记就可以过,不标记的话会超内存. 另外,poj的数据要比hdu强一些,比如0 100,这种数据.不特判的话会RE.不过如果不特判,在poj上用C ...
- [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 方法:其实就是从两个点分别探寻单源最短路径,两个点到同一个目标位置的最短路径都求出来,相加,然 ...
- [HDU] 1181 变形课-简单建模后广搜
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1181 方法:以所有咒语看做一条起点为首字母,终点为末字母的有向边来建立有向图.然后在图中判断目标路径 ...
- A strange lift HDU - 1548(基础广搜)
There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 ...
- hdu 2612 Find a way (广搜)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...
- hdu 1253 胜利大逃亡 (广搜)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...
- poj 3278 Catch That Cow 广搜
hdu 2717 Catch That Cow,题目链接 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 双向广搜 8数码问题
转载自:http://blog.sina.com.cn/s/blog_8627bf080100ticx.html Eight 题目链接:http://acm.hdu.edu.cn/showprob ...
- 提高篇 第一部分 基础算法 第4章 广搜的优化技巧
LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 「一本通 1.4 例 1」电路维修 电路维修 (广搜 ...
最新文章
- elasticsearch 集群在线水平扩容收缩
- java多态口诀,Java之路---Day12(多态),多态Java
- WSDM 2022 | 基于元学习的多场景多任务商家建模
- js template换行_JavaScript字符串换行符?
- 一面微创题--字符串逆序输出
- Git - 推送当前分支快捷方式
- 计算某日是该年的第几天
- vs2015+opencv+dilb+于仕琪人类识别算法对人脸特征点进行检测
- excel如何选中空单元格并计算总计、平均值、率
- RAC-iOS中基本用法
- Linux 安装WinUSB
- 发生错误,无法导入项目(不能取回此项的内容)
- Linux 查看tomcat占用的端口号
- SimpleRNN实现股票预测
- BootStrap中修改navbar导航条的默认高度
- 计算机毕业设计基于安卓/微信小程序的健身房健身管理系统
- 电脑启动多个微信的方法
- openid和unionid的区别
- mapbox地图动画一键飞行
- 值得收藏的35+ 免费Javascript /Flash相册
热门文章
- Linux du指令
- Linux shell脚本附带选项(参数传递及接收)
- 请讲一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程
- spring mvc工作原理及组件说明
- 多级缓存中的一级缓存全网流量分发CDN
- 使用jQuery OCUpload实现excel文件一键上传功能
- 列表根据下标取值_Python基础知识点——list(列表)讲解
- bios设置_大白菜U盘启动BIOS设置教程
- JavaSE、JavaEE、JavaME、jdk、jre、jvm、java主要的11个特性
- 人体识别_深度学习资讯 | 用于人体动作识别的26层卷积神经网络