[HDU 1254] 推箱子
推箱子
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5343 Accepted Submission(s): 1503
现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.

搜索水题、
百度了下,目测网上基本都是搜索套搜索。。。。。
代码可能会有错、没怎么检查就水过了。
应该容易懂、不注释了 - -
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define INF 0x7ffffff
#define N 8 struct node
{
int px,py;
int bx,by;
int step;
}; int ans;
int flag;
int n,m;
int px,py;
int bx,by;
int mpt[N][N];
int vis1[N][N];
int vis2[N][N][N][N];
int dir[][]={,-,,,-,,,}; bool judge(int x,int y)
{
if(x>= && x<=n && y>= && y<=m && mpt[x][y]!=) return ;
return ;
}
void bfs()
{
queue<node> q;
node now,next;
now.bx=bx;
now.by=by;
now.px=px;
now.py=py;
now.step=;
vis2[now.bx][now.by][now.px][now.py]=;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(mpt[now.bx][now.by]==)
{
ans=min(ans,now.step);
return;
}
for(int i=;i<;i++)
{
next=now;
next.px+=dir[i][];
next.py+=dir[i][];
if(!judge(next.px,next.py)) continue;
if(next.bx==next.px && next.by==next.py)
{
next.step++;
next.bx+=dir[i][];
next.by+=dir[i][];
if(!judge(next.bx,next.by)) continue;
}
if(!vis2[next.bx][next.by][next.px][next.py])
{
vis2[next.bx][next.by][next.px][next.py]=;
q.push(next);
}
}
}
}
void dfs(int x,int y)
{
if(mpt[x][y]==)
{
flag=;
return;
}
if(flag) return;
for(int i=;i<;i++)
{
int tx=x+dir[i][];
int ty=y+dir[i][];
if(judge(tx,ty) && mpt[tx][ty]!= && !vis1[tx][ty])
{
vis1[tx][ty]=;
dfs(tx,ty);
vis1[tx][ty]=;
}
}
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
scanf("%d",&mpt[i][j]);
if(mpt[i][j]==)
{
bx=i;
by=j;
}
}
}
ans=INF;
for(i=;i<;i++)
{
px=bx+dir[i][];
py=by+dir[i][];
if(judge(px,py))
{
flag=;
memset(vis1,,sizeof(vis1));
dfs(px,py);
if(flag)
{
memset(vis2,,sizeof(vis2));
bfs();
}
}
}
if(ans==INF)
cout<<-<<endl;
else
cout<<ans<<endl;
}
return ;
}
[HDU 1254] 推箱子的更多相关文章
- HDU 1254 推箱子(BFS加优先队列)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1254 推箱子 Time Limit: 2000/1000 MS (Java/Others) Me ...
- HDU 1254 推箱子 BFS
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目分析: 做这道题,感觉挺简单的,做着做着就错了20次, 我也是醉了, WA到吐的节奏啊! 思 ...
- hdu 1254 推箱子(搜索)
我写的第一道感觉比较难的搜索 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 首先要推箱子的话要满足人能够在箱子旁边,而且人的对面也是可通的. ...
- hdu - 1254 推箱子 (bfs+bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目意思很简单,只要思路对就好. 首先考虑搬运工能否到达推箱子的那个点,这个可以根据箱子前进方向得出搬运工 ...
- hdu.1254.推箱子(bfs + 优先队列)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- 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 一开始常规的人用来做主导,想着想着不对劲,其实是箱子为主导,人只是箱子能否推进的一个判断. 可以 ...
随机推荐
- 306573704 Char型和string型字符串比较整理(转)
1.赋值 char赋值: char ch1[] = "give me"; char ch2[] = "a cup"; strcpy(ch1,ch2); cout ...
- How to: Reading an ini config file from a batch file
Original Link: http://almanachackers.com/blog/2009/12/31/reading-an-ini-config-file-from-a-batch-fil ...
- 安装mvc3出错致命错误
给vs2010安装mvc3,出现如下错误提示: Installation failed with error code: (0x80070643), "安装时发生严重错误 ". 将 ...
- 我忽略了的DOCTYPE!
最近不知道是不是因为天气的原因,瞌睡太多了,而且每天晚上都做梦,更奇怪的是每次做梦都能够连着上次没有做完的梦继续做.第二天上班又没有精神,人都快崩溃了!不说了,郁闷! 偶然看到一个问题:Doctype ...
- 遍历 TextBox控件
foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Form ...
- 51nod动态规划-----矩阵取数
一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值. 例如:3 * 3的方格. 1 3 3 2 1 3 2 2 1 能够获得的最 ...
- Be Pythonic ,Google Python Style Guide
为了更规范的写代码,变得更专业 分号 1 不在句末添加分号,不用分号在一行写两句代码 行长度 2 每行不超过80字符,python会隐式行连接圆括号,中括号,花括号中的字符,如多参数方法调用可以写为多 ...
- iOS8中的UIActionSheet添加UIDatePicker后,UIDatePicker不显示问题
解决方法: IOS8以前: UIActionSheet* startsheet = [[UIActionSheet alloc] initWithTitle:title delegate:self ...
- asp.net中对象的序列化,方便网络传输
对象序列化 是将对象状态转换为可保持或传输的格式的过程.反序列化 是将流转换为对象序列化和反序列化相结合 可以使对象数据轻松的存储和传递 在 .NET 中,如果是对象可序列化,需要在 声明对象的开始部 ...
- css3 旋转出现动画
@-moz-keyframes daf{ 0% { -moz-transform: rotate(-360deg) scale(0.2); -webkit-transform: rotate(-360 ...