HDU1254 推箱子(BFS) 2016-07-24 14:24 86人阅读 评论(0) 收藏
推箱子
Problem Description
现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.

Input
Output
Sample Input
1
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
Sample Output
4
————————————————————————————————————————————
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std; int dir[4][2] = { { -1, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 } };
int mp[10][10];
int vir[10][10][10][10];
int m, n;
struct node{
int bx, by;
int rx, ry;
int cnt;
};
struct man{
int x, y;
}; bool check(int i, int j)
{
if (i<1 || i>m || j<1 || j>n || mp[i][j] == 1)
return 0;
return 1;
} int bfs2(int si, int sj, int di, int dj, int bi, int bj)
{
int vis[10][10];
memset(vis, 0, sizeof(vis));
queue<man>qu;
man st, ed;
st.x = si;
st.y = sj;
vis[si][sj] = 1;
qu.push(st);
while (!qu.empty())
{
st = qu.front();
qu.pop();
if (st.x == di&&st.y == dj)
return 1;
for (int i = 0; i < 4; i++)
{
ed.x = st.x + dir[i][0];
ed.y = st.y + dir[i][1];
if (check(ed.x, ed.y)&& !vis[ed.x][ed.y]&& (ed.x != bi||ed.y != bj))
{
vis[ed.x][ed.y] = 1;
qu.push(ed);
}
}
}
return 0;
} int bfs(int bi, int bj, int ri, int rj, int di, int dj)
{
queue<node>q;
node f, d;
f.bx = bi;
f.by = bj;
f.rx = ri;
f.ry = rj;
f.cnt = 0;
vir[bi][bj][ri][rj] = 1;
q.push(f);
while (!q.empty())
{
f = q.front();
q.pop();
if (f.bx == di&&f.by == dj)
return f.cnt;
for (int i = 0; i<4; i++)
{
d.bx = f.bx + dir[i][0];
d.by = f.by + dir[i][1];
d.rx = f.bx - dir[i][0];
d.ry = f.by - dir[i][1];
if (check(d.bx, d.by)&&check(d.rx,d.ry) && !vir[d.bx][d.by][d.rx][d.ry])
{ if (bfs2(f.rx, f.ry, d.rx, d.ry, f.bx, f.by))
{
vir[d.bx][d.by][d.rx][d.ry] = 1;
d.cnt = f.cnt + 1;
q.push(d);
}
}
}
}
return -1;
} int main()
{
int o, ri, rj, di, dj, bi, bj;
scanf("%d", &o);
while (o--)
{
scanf("%d%d", &m, &n);
for (int i = 1; i<=m; i++)
for (int j = 1; j<=n; j++)
{
scanf("%d", &mp[i][j]);
if (mp[i][j] == 4)
{
ri = i;
rj = j;
}
if (mp[i][j] == 2)
{
bi = i;
bj = j;
}
if (mp[i][j] == 3)
{
di = i;
dj = j;
}
}
int ans = bfs(bi, bj, ri, rj, di, dj);
memset(vir, 0, sizeof(vir));
printf("%d\n", ans); }
return 0;
}
HDU1254 推箱子(BFS) 2016-07-24 14:24 86人阅读 评论(0) 收藏的更多相关文章
- HDU1072 Nightmare(BFS) 2016-07-24 14:02 40人阅读 评论(0) 收藏
Nightmare Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth w ...
- HDU1372 Knight Moves(BFS) 2016-07-24 14:50 69人阅读 评论(0) 收藏
Knight Moves Problem Description A friend of you is doing research on the Traveling Knight Problem ( ...
- iOS正则表达式 分类: ios技术 2015-07-14 14:00 35人阅读 评论(0) 收藏
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- Hdu2181 哈密顿绕行世界问题 2017-01-18 14:46 45人阅读 评论(0) 收藏
哈密顿绕行世界问题 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Sub ...
- Hdu2102 A计划 2017-01-18 14:40 60人阅读 评论(0) 收藏
A计划 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- Hadoop入门经典:WordCount 分类: A1_HADOOP 2014-08-20 14:43 2514人阅读 评论(0) 收藏
以下程序在hadoop1.2.1上测试成功. 本例先将源代码呈现,然后详细说明执行步骤,最后对源代码及执行过程进行分析. 一.源代码 package org.jediael.hadoopdemo.wo ...
- Lucene学习总结之四:Lucene索引过程分析 2014-06-25 14:18 884人阅读 评论(0) 收藏
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...
- MS SQL数据批量备份还原(适用于MS SQL 2005+) 分类: SQL Server 数据库 2015-03-10 14:32 103人阅读 评论(0) 收藏
我们知道通过Sql代理,可以实现数据库的定时备份功能:当数据库里的数据库很多时,备份一个数据库需要建立对应的定时作业,相对来说比较麻烦: 还好,微软自带的osql工具,比较实用,通过在命令行里里输入命 ...
- A Plug for UNIX 分类: POJ 图论 函数 2015-08-10 14:18 2人阅读 评论(0) 收藏
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14786 Accepted: 4994 Desc ...
随机推荐
- DataFrame 取值
通过 DataFrame[ ]方式,取得得都是行, [ ] 中,添加过滤条件 data = pd.DataFrame( np.arange(16).reshape(4,4), index=['OP', ...
- statement 对象执行sql语句
statement对象执行sql语句 关于Statement.它是Java执行数据库操作的一个重要步骤,可以执行一些简单的SQL语句,从而完成对数据库的操作.它有两个子接口,分别是Prepare ...
- ArcGIS案例学习笔记1_1
ArcGIS案例学习笔记1_1 联系方式:谢老师,135_4855_4328, xiexiaokui#qq.com 时间:第一天上午 准备 0.U盘复制ArcGIS培训*** 1.练习数据不要放到桌面 ...
- Elon Musk
人物事件 成长学习 年6月28日,埃隆·马斯克在南非的比勒陀利亚出生,他的 埃隆·马斯克 父亲是一名南非机电工程师,母亲是加拿大人,从事营养师兼模特.[8] 年,10岁的马斯克就拥有了自己的第一台电 ...
- HTML 鼠标悬浮隐藏部分 习题
css样式表: @charset "utf-8"; /* CSS Document */ .a { width:80px; height:40px; background-colo ...
- Spark之 Spark Streaming整合kafka(Java实现版本)
pom依赖 <properties> <scala.version>2.11.8</scala.version> <hadoop.version>2.7 ...
- Ubuntu 16.04安装Git及GUI客户端
1.通过APT源安装Git命令行工具 这里不建议通过源码进行安装,增加复杂程度,且最新版本的Git在各个方面都会修复,不至于出现不能用的状态. sudo add-apt-repository ppa: ...
- 基于快速排序的数组划分:2组 3组 K组(sort color)大小写排序 · Partition Array
2组: [抄题]: 给出一个整数数组 nums 和一个整数 k.划分数组(即移动数组 nums 中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中 ...
- 面向对象 Java练习
package xin.bao; public class Pingguo { private String Zhonglei;// 种类 public String getZhonglei() { ...
- csv中文乱码
处理办法:https://jingyan.baidu.com/album/3c48dd3464b46ce10be3581f.html?picindex=2