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 ...
随机推荐
- destoon 分页
php: global $pagesize,$page; $pagesize = 10;//分页改为10条一页 $offset or $offset = ($page-1)*$pagesize; $t ...
- New Document (2)
#Markdown 语法说明 (简体中文版) / (点击查看快速入门) ##概述 ###宗旨 兼容 HTML 特殊字符自动转换 区块元素 段落和换行 标题 区块引用 列表 代码区块 分隔线 区段元素 ...
- 第六章 图(d)深度优先搜索
- Python3 filter() 函数
Python3 filter() 函数 Python3 内置函数 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转 ...
- html节点操作与事件
<div id='a' style="width: 500px;height: 500px;background-color: grey;"> </div> ...
- Kuberentes-入门
一.kubernetes架构介绍和集群规划 点击链接查看: 系统环境初始化:https://www.cnblogs.com/hwlong/p/9105742.html 二.CA证书创建和分发 点击链接 ...
- curl学习(实例不断总结)
1.先来一个简单的案例,请求http协议的网站 // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURL ...
- 如何在64位WIN7旗舰版下安装SQL2000
1>找到安装包下面的“DEVELOPER”或“ENTERPRISE”等下的X86\SETUP下的“SETUPSQL.EXE”,在安装前右键单击这个文 件, 1.1 打开“兼容性”标签,兼容模式选 ...
- PID算法(C语言)
/************ PID算法(C语言) ************/ #include <stdio.h> #include<math.h> struct _pid { ...
- Laravel Eloquent Model->isDirty() Function
1 引言 introduction 有时,我们需要在 Model 某些属性发生变化时,作出相应的处理. 这时,我们可以使用 Model->isDirty() 方法进行判断. 2 场景 比如,姓名 ...