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
现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.

5 5
0 3 0 0 0
1 0 1 4 0
0 0 1 0 0
1 0 2 0 0
0 0 0 0 0
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
int T ;
int n , m ;
const int M = ;
int map[M][M] ;
bool vis[M][M][M][M] ;
int move[][] = {{,} , {- , } , {,} , { , -} } ;
struct node
{
int x , y ;
int a , b ;
int time ;
bool operator < (const node &rhs ) const
{
return time > rhs.time ;
}
}; int bfs (int sx , int sy , int mx , int my , int ex , int ey)
{
//printf ("Last---> (%d,%d)\n" , ex , ey ) ;
node ans , tmp ;
std::priority_queue<node> q ;
memset (vis , , sizeof(vis)) ;
while ( !q.empty ()) q.pop () ;
q.push ( (node) {sx , sy , mx , my , }) ;
vis[sx][sy][mx][my] = ;
if (mx == ex && my == ey) return ;
while ( !q.empty ()) {
ans = q.top () ; q.pop () ;
// printf ("S----(%d,%d) tui (%d,%d)\n" , ans.x , ans.y , ans.a , ans.b ) ;
for (int i = ; i < ; i ++) {
tmp = ans ;
tmp.x += move[i][] ; tmp.y += move[i][] ;
if (tmp.x < || tmp.y < || tmp.x == n || tmp.y == m) continue ;
if (map[tmp.x][tmp.y] == ) continue ;
if (tmp.x == tmp.a && tmp.y == tmp.b ) {
int x = tmp.x + move[i][] , y = tmp.y + move[i][] ;
if (x < || y < || x == n || y == m) continue ;
if (map[x][y] == ) continue ;
tmp.a = x , tmp.b = y ;
tmp.time ++ ;
}
if (vis[tmp.x][tmp.y][tmp.a][tmp.b]) continue ;
vis[tmp.x][tmp.y][tmp.a][tmp.b] = ;
q.push (tmp ) ;
// printf ("(%d,%d) tui (%d,%d)\n" , tmp.x , tmp.y , tmp.a , tmp.b ) ;
if (tmp.a == ex && tmp.b == ey) return tmp.time ;
}
}
return - ;
} int main ()
{
//freopen ("a.txt" , "r" , stdin ) ;
scanf ("%d" , &T ) ;
while (T --) {
scanf ("%d%d" , &n , &m ) ;
int k ;
int sx , sy , ex , ey , mx , my ;
for (int i = ; i < n ; i ++) for (int j = ; j < m ; j ++) scanf ("%d" , &map[i][j]) ;
for (int i = ; i < n ; i ++) {
for (int j = ; j < m ; j ++) {
if (map[i][j] == ) sx = i , sy = j ;
else if (map[i][j] == ) mx = i , my = j ;
else if (map[i][j] == ) ex = i , ey = j ;
}
}
if ( (k = bfs (sx , sy , mx , my , ex , ey )) == -) puts ("-1") ;
else printf ("%d\n" , k ) ;
}
return ;
}
[ Copy to Clipboard ] [ Save to File]
hdu.1254.推箱子(bfs + 优先队列)的更多相关文章
- HDU 1254 推箱子 BFS
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目分析: 做这道题,感觉挺简单的,做着做着就错了20次, 我也是醉了, WA到吐的节奏啊! 思 ...
- hdu - 1254 推箱子 (bfs+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目意思很简单,只要思路对就好. 首先考虑搬运工能否到达推箱子的那个点,这个可以根据箱子前进方向得出搬运工 ...
- HDU 1254 推箱子(BFS加优先队列)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1254 推箱子 Time Limit: 2000/1000 MS (Java/Others) Me ...
- HDU 1254 推箱子(BFS)
Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不 ...
- hdu 1254 推箱子(双重bfs)
题目链接 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能 ...
- hdu 1254 推箱子(嵌套搜索,bfs中有dfs)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1254 推箱子(搜索)
我写的第一道感觉比较难的搜索 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 首先要推箱子的话要满足人能够在箱子旁边,而且人的对面也是可通的. ...
- [HDU 1254] 推箱子
推箱子 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 一开始常规的人用来做主导,想着想着不对劲,其实是箱子为主导,人只是箱子能否推进的一个判断. 可以 ...
随机推荐
- 远程连接RabbitMQ失败
远程连接RabbitMQ失败 为了避免污染宿主系统环境,于是在虚拟机中搭建了一个linux环境并且按照了rabbitmq-server.然后在远程连接的时候一直连接失败. 官网上面给的例子都是在本地使 ...
- AngularJs $animate 让页面动起来
$animate $animate服务提供了基本的DOM操作功能如在DOM里插入.移除和移动元素,以及添加和删除类.这个服务是ngAnimate的核心服务,为CSS和Javascript提供了高档次的 ...
- JSP+Servlet+javabean+mysql实现页面多条件模糊查询
需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标 ...
- Hierarchical Softmax
When predicting over large vocabulary, softmax becomes one of the expensive computation part. There ...
- Saltstack远程执行(四)
Saltstack远程执行 语法例:salt '*' cmd.run 'w' - 命令:salt - 目标:'*' - 模块:cmd.run,自带150+模块,也可以自己写模块 - 返回:执行 ...
- python调用ggsci.exe程序
需求:通过python调用windows server 2008下的ogg同步程序,实现图形化控制. 简单GUI
- Nginx与服务器集群在它的配置文件中的配置
- Arcgis 几何网络分析
ArcGIS:网络分析(转) 由于之前对网络分析的理解有很多问题,所以在网上找了一些资料,这是其中一篇我觉得比较好的,所以就整理了一下,发到网上来,留个底吧,呵呵 注:关于几何网络的建立见前面的& ...
- Android之Proguard语法
-include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_pat ...
- C#------EntityFramework实体加载数据库SQLServer(MySQL)
一.SQLServer数据库创建表Company,包含ID,CName,IsEnabled三列 二.(1)VS新建一个DXApplication工程,名为CompanyManageSystem (2) ...