hdu.1254.推箱子(bfs + 优先队列)
推箱子
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6021 Accepted Submission(s): 1718
现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<queue> 5 int T ; 6 int n , m ; 7 const int M = 10 ; 8 int map[M][M] ; 9 bool vis[M][M][M][M] ; 10 int move[][2] = {{1,0} , {-1 , 0} , {0,1} , {0 , -1} } ; 11 struct node 12 { 13 int x , y ; 14 int a , b ; 15 int time ; 16 bool operator < (const node &rhs ) const 17 { 18 return time > rhs.time ; 19 } 20 }; 21 22 int bfs (int sx , int sy , int mx , int my , int ex , int ey) 23 { 24 //printf ("Last---> (%d,%d)\n" , ex , ey ) ; 25 node ans , tmp ; 26 std::priority_queue<node> q ; 27 memset (vis , 0 , sizeof(vis)) ; 28 while ( !q.empty ()) q.pop () ; 29 q.push ( (node) {sx , sy , mx , my , 0}) ; 30 vis[sx][sy][mx][my] = 1 ; 31 if (mx == ex && my == ey) return 0 ; 32 while ( !q.empty ()) { 33 ans = q.top () ; q.pop () ; 34 // printf ("S----(%d,%d) tui (%d,%d)\n" , ans.x , ans.y , ans.a , ans.b ) ; 35 for (int i = 0 ; i < 4 ; i ++) { 36 tmp = ans ; 37 tmp.x += move[i][0] ; tmp.y += move[i][1] ; 38 if (tmp.x < 0 || tmp.y < 0 || tmp.x == n || tmp.y == m) continue ; 39 if (map[tmp.x][tmp.y] == 1 ) continue ; 40 if (tmp.x == tmp.a && tmp.y == tmp.b ) { 41 int x = tmp.x + move[i][0] , y = tmp.y + move[i][1] ; 42 if (x < 0 || y < 0 || x == n || y == m) continue ; 43 if (map[x][y] == 1) continue ; 44 tmp.a = x , tmp.b = y ; 45 tmp.time ++ ; 46 } 47 if (vis[tmp.x][tmp.y][tmp.a][tmp.b]) continue ; 48 vis[tmp.x][tmp.y][tmp.a][tmp.b] = 1 ; 49 q.push (tmp ) ; 50 // printf ("(%d,%d) tui (%d,%d)\n" , tmp.x , tmp.y , tmp.a , tmp.b ) ; 51 if (tmp.a == ex && tmp.b == ey) return tmp.time ; 52 } 53 } 54 return - 1 ; 55 } 56 57 int main () 58 { 59 //freopen ("a.txt" , "r" , stdin ) ; 60 scanf ("%d" , &T ) ; 61 while (T --) { 62 scanf ("%d%d" , &n , &m ) ; 63 int k ; 64 int sx , sy , ex , ey , mx , my ; 65 for (int i = 0 ; i < n ; i ++) for (int j = 0 ; j < m ; j ++) scanf ("%d" , &map[i][j]) ; 66 for (int i = 0 ; i < n ; i ++) { 67 for (int j = 0 ; j < m ; j ++) { 68 if (map[i][j] == 4) sx = i , sy = j ; 69 else if (map[i][j] == 2) mx = i , my = j ; 70 else if (map[i][j] == 3) ex = i , ey = j ; 71 } 72 } 73 if ( (k = bfs (sx , sy , mx , my , ex , ey )) == -1) puts ("-1") ; 74 else printf ("%d\n" , k ) ; 75 } 76 return 0 ; 77 } 78 [ Copy to Clipboard ] [ Save to File]
View Code
转载于:https://www.cnblogs.com/get-an-AC-everyday/p/4494740.html
hdu.1254.推箱子(bfs + 优先队列)相关推荐
- HDU 1254 推箱子 BFS
囧,一开始没有管人的情况,只看箱子,果然SB了. #include <cstdio> #include <cstring> #include <iostream> ...
- hdu 1254 推箱子(嵌套搜索,bfs中有dfs)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- [HDU 1254] 推箱子
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 1 #include<cstdio> 2 #include<queue> ...
- hdu 1254(dfs+bfs+优先队列)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...
- HDU 1254推箱子
推箱子 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissio ...
- hdu 5040 Instrusive【BFS+优先队列】
2014北京网络赛09题,hdu 5040 这次网络赛真是惨,也怪做题策略没想好,当时切完签到题之类的水题之后,马上就去看06青蛙那题去了.结果被那只死青蛙给坑惨了T_T...搞了四小时没搞出来... ...
- 【HDU - 1254 】推箱子 (双bfs)
题干: 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个 ...
- 推箱子 (hdu1254)(bfs双重广搜)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissio ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
最新文章
- Fedora WIFI频繁断开问题的解决办法
- S/4HANA生产订单的标准状态和透明工厂原型状态的映射
- python点击按钮创建进程_python-创建进程的三种方式
- GDB调试之ptrace实现原理
- Extjs 实战之 Ext.tree.TreePanel Tree无法显示
- 同宿舍的程序员毕业五年的现状:有人要当“螺丝钉”,有人头发掉光要出家...
- mysql 递归查询所有父级
- 《高等运筹学》复习题手写解答 Advanced Operations Research: Final Exam:Review Exercises
- angular获取当前路由信息
- Adobe MAX 2011第一天主题演讲实录
- 网盘中html怎么转成视频,怎么将百度网盘保存的MKV转换MP4格式
- 【柒穆雨】什么是平面设计,学习平面设计需要具备什么条件?
- 大疆FPGA/芯片开发工程师(A卷、B卷)笔试题详解
- 渗透测试-CTF_AWD专题篇
- TVS和一般的稳压二极管有什么区别? (转)
- 机器人总动员片尾曲歌词_机器人总动员中的所有歌曲叫什么名?
- 写给自己看的C4D建模笔记
- C++primer plus学习笔记
- 语法大全!20张图,彻底分清英语中的主、谓、宾、定、状、补
- 微信支付网页二维码NATIVE