hdu 1254 推箱子(两次广搜)

解决推箱子问题的小程序BC源码 穷举法寻找答案,过到了68关受阻。上传源码以抛砖引玉。 立即下载

/*

这题一个下午了,现在终于过了;

用了两次广搜,一次搜箱子到目标地,第二次搜人是可以到推动箱子的地方,要注意的是箱子可能会阻挡人,也可以来回的推。

给几组数据就知道了(这题数据都是后面讨论版中提供的)

10

4 3

0 0 0

0 0 1

0 2 3

1 4 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

4 4

1 2 1 1

0 0 0 0

0 4 3 0

0 0 0 0

4 4

0 3 0 0

0 0 2 0

0 0 4 0

0 1 0 1

3 3

0 3 0

1 0 2

0 4 0

5 5

0 1 4 0 0

0 1 1 1 1

0 2 3 0 0

0 0 0 0 0

0 0 0 0 0

4 4

0 1 0 1

0 2 0 4

0 0 0 0

0 3 0 1

*/

#include<iostream>
#include<queue>
#define N 8
using namespace std;
int n, m, str[N][N], mark[N][N], pmark[N][N], dir[4][2]={1,0, -1,0, 0,1, 0,-1};
int s_x, s_y, e_x, e_y, p_x, p_y;

struct node
{
	int x, y, step, dx, dy;
};

int judge(int x, int y)
{
	if(x>=0 && x< n && y>=0 && y<m && str[x][y] != 1)
		return 1;
	else
		return 0;
}

int work(int box_x, int box_y, int end_x, int end_y, int sta_x, int sta_y)
{
	int i, x, y;
	node cur, next;
	queue<node>q2;
	cur.x = sta_x; cur.y = sta_y; cur.step=0;
	q2.push(cur);
	while(!q2.empty())
	{
		cur = q2.front();
		q2.pop();
		if(cur.x==end_x && cur.y==end_y)
			return cur.step;
		for( i=0; i < 4; i++ )
		{
			next.x = x = cur.x + dir[i][0];
			next.y = y = cur.y + dir[i][1];
			next.step = cur.step + 1;
			if(judge(x, y) && pmark[x][y]==0 && (x!=box_x || y!=box_y))
			{
				pmark[x][y] = 1;
				q2.push(next);
			}
		}
	}
	return -1;
}

int bfs()
{
	int i;
	node cur, next;
	queue<node>q1;
	cur.x=s_x; cur.y=s_y; cur.step=0;
	next.dx=cur.dx=p_x; next.dy=cur.dy=p_y;
	q1.push(cur);
	while(!q1.empty())
	{
		cur = q1.front();
		q1.pop();
		if(cur.x==e_x && cur.y==e_y)
			return cur.step;
		for( i=0; i < 4; i++ )
		{
			next.x = cur.x+dir[i][0];
			next.y = cur.y+dir[i][1];
			next.step = cur.step+1;
			//next.dx = cur.x; next.dy = cur.y;
			memset(pmark, 0, sizeof(pmark));
			int ans = work(cur.x, cur.y, cur.x-dir[i][0], cur.y-dir[i][1], cur.dx, cur.dy);
			if(ans!=-1 && judge(next.x, next.y) && mark[next.x][next.y]<=30)
			{
				mark[next.x][next.y] += 1;
				next.dx = cur.x-dir[i][0];
				next.dy = cur.y-dir[i][1];
				q1.push(next);
			}
		}
	}
	return 0;
}

int main()
{
	int T, i, j;
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d%d", &n, &m);
		for( i=0; i < n; i++ )
		{
			for(j=0; j < m; j++ )
			{
				scanf("%d", &str[i][j]);
				if(str[i][j] == 2)
					s_x=i, s_y=j;
				if(str[i][j] == 3)
					e_x=i, e_y=j;
				if(str[i][j] == 4)
					p_x=i, p_y=j;
			}
		}
		memset(mark, 0, sizeof(mark));
		int ans=bfs();
		if(ans==0)
			printf("-1\n");
		else
			printf("%d\n", ans);
	}
	return 0;
}


 

 

TCD1254GFG驱动与数据输出 STM32F030F系列的线性CCD图像传感器驱动程序,CCD硬件模块为TCD1254GFG,也包括数据的输出,硬件电路图木有,也看不懂。 立即下载

相关推荐

在Docker中集成GPU监控体系

先上效果图 等文档整理出来再更

tamako0v0的博客 2470

推箱子,广搜,最小步数并输出路径

题目链接:http://www.tzcoder.cn/acmhome/problemdetail.do?method=showdetail&id=1346 解题思路:若把箱子当做自由移动的物体,就可以用最简单的广搜计算出最短步数。但是箱子不能自主移动,箱子若需要向左移动,那么人到箱子右边的时候才能使箱子移动。即人若能到箱子想移动的方向的反方向的位置时,箱子能移动。在箱子的每种状态下人的位置与其绑定。可以建立结构器绑定相关位置。 typedef struct node { char s[1..

weixin_52572171的博客 1411

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 572

hdu1254(bfs+bfs)

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1254 推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4040    Accepted Submission(s): 11

ten_three 939

解决WSL2网络隔离:Ubuntu子系统共享Windows代理的3种方法

本文详细解析了WSL2的网络隔离特性,并提供了三种在Ubuntu子系统中共享Windows代理的实用方法:环境变量法、配置文件法和系统服务法。通过具体代码示例和方案对比,帮助开发者快速解决WSL2网络访问问题,实现一键设置代理,提升开发效率。

weixin_29295541的博客 450

在没有信用卡的情况下怎么申请谷歌云(Google Cloud)?

这笔额度足够用来跑一台云服务器、部署小型网站,甚至可以尝试 AI、机器学习等项目。但问题来了——想要拿到这 300 美元,你必须先通过支付方式验证。默认选项就是绑定一张国际信用卡(Visa、MasterCard 之类),然而不少人没有信用卡,或者信用卡无法支持国际支付,结果就卡在注册第一步。很多人会疑惑:既然是送额度,为什么还要绑卡?原因其实很简单:谷歌需要确认你是真实用户,而不是批量注册薅羊毛;通过支付验证,后续如果你用完 300 美元额度,可以直接进行付费使用;

m0_74824483的博客 5652

Discord机器人快速搭建指南:Node.js + discord.js 实战

Discord机器人是现代社区运营与自动化协作的核心技术载体,其本质是基于事件驱动架构的实时消息处理系统。它依托WebSocket长连接与HTTP短请求混合通信模型,通过SDK封装底层协议细节,实现毫秒级响应。技术价值在于降低人力运维成本、提升用户交互体验,并支撑知识库、客服系统、DevOps通知等轻量级服务场景。本文聚焦最主流且工程友好的技术栈——Node.js运行时与discord.js官方SDK,结合v20.x LTS版本稳定性、ESM模块规范、Slash Command原生支持等关键特性,提供从零部

dixi7825的博客 568

Spring Boot Swagger未授权访问漏洞:原理、风险与修复方案详解

在微服务架构中,API文档管理是开发与运维的重要环节。Swagger作为RESTful API文档生成与调试的标准化工具,通过OpenAPI规范自动生成交互式接口文档,极大提升了开发效率。然而,其默认配置往往缺乏访问控制,导致文档端点直接暴露,形成未授权访问漏洞。从技术原理看,该漏洞源于Spring Boot等框架集成Swagger时,相关端点未纳入安全框架的拦截范围,攻击者可通过扫描常见路径获取完整的接口定义与数据结构。这不仅会造成敏感信息泄露,更可能成为越权操作、数据篡改等深度攻击的入口点。在工程实践中

weixin_42524171的博客 495

hdu 1254 推箱子 广搜+ 深搜

http://acm.hdu.edu.cn/showproblem.php?pid=1254   注意以下几点 1.  箱子是否可走 2. 人是否可达箱子后面 3. 箱子的每个方向只走一次,而不是每个位置   广搜箱子路径,深搜人可否达箱子后面, 记录方向用visb[10][10][4]来记录   #include #include #include #include #

倩 2103

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

多语言版本解决方案是应对全球化趋势的关键策略,它通过构建灵活且可扩展的架构,支持软件产品在不同语言和文化环境下的顺畅运行与展示。此方案涵盖了前端多语言界面实现、后端多语言数据处理及大数据环境下的多语言支持等多个层面,确保公司能够高效地推出适应全球用户多样化需求的软件产品。在前端多语言界面实现方面,解决方案采用了国际化与本地化的结合方法。国际化过程确保软件的功能和代码设计能够处理多种语言和文化习惯,而本地化则针对特定地区进行界面和内容的调整。

大模型大数据攻城狮的专栏 2753

hdu 1254 推箱子 BFS

hdu 1254 推箱子 BFS[含测试数据] 题目链接: Here! 思路:每次箱子移动之前,肯定都是人先到达箱子相邻的位置上,然后推动箱子移动一步。比如:箱子现在的位置是(x,y),如果箱子需要向(1,0)方向移动,即箱子要移动到(x+1,y),那么肯定需要先让人移动到(x-1,y)的位置上。如果 这样每次箱子移动一步之前,就需要检查人是不是能够到达与之相邻的位置。 然后需要注意的是B

Fighting! 1784

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk是一个面向SAP ABAP开发的AI自动化工具集,它通过ADT API将SAP开发能力系统化地暴露给AI助手和命令行工作流。该工具支持ECC、S/4HANA等所有启用ADT的系统,提供代码读取、修改、测试、调试等全流程自动化能力。核心功能包括AI调试、上下文压缩、ABAP语言服务、Lua脚本自动化等,并内置多重安全控制。其分层架构兼容标准ADT和WebSocket扩展,既适合AI驱动开发,也支持传统DevOps自动化,特别适用于老系统代码考古、知识接力和复杂问题诊断场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 150

HDU1254 推箱子 双BFS

HDU1254 推箱子Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u SubmitStatusDescription推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果

围巾的ACM博客 3444

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[HDU 1254] 推箱子

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 using namespace std; 5 6 #define INF 0xfffffff ...

weixin_33711641的博客 163

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hdu1254 推箱子(广搜bfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目意思很简单,就是小时候玩过的推箱子游戏。但是这个要写成代码还是有很多东西需要考虑。 最主要的就是需要判断人能否走到箱子后面推动箱子,并且人不能穿越箱子。 对于这组数据 4 4 0 0 0 0 0 0 1 1 0 2 3 1 1 4 1 1 输

Mis_xiao的博客 721

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HDU 1254推箱子

推箱子 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 12   Accepted Submission(s) : 6 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个

Dream_M 1770

HDU 1254 推箱子(搜索)

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 以前就做过的一题,重温一下 推箱子游戏,首先广搜箱子的路径,每一次移动都要判断人是否能到达指定位置(BFS,DFS都行),我采用两次BFS解决问题 在箱子的移动中,判重的时候需要一个三维数组,箱子从不同方向过来,人的位置

窝不是爱酱,喵~~~~ 4349

hdu1254推箱子

Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上(如图2)那么箱子就不能再被移动了,如果箱子被推到一面墙上,那么箱子只能沿着墙移动. 现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.

WAR___NING的专栏 588

hdu1254推箱子(BFS)

题目链接:hdu1254 /* 用广搜寻找最小步数,推箱子需要满足以下几个条件: 1.人能走到推箱子的那个位置 2.人不能穿过箱子. 3.箱子可以回到前一状态的位置,但不是同一方向回到的 */ #include #include #include #include #include #include #include using namespace std; int d[4][2]

no pains,no gains 1318

HDU 1254(推箱子)

本题有一定难度,使用双向BFS,一个是从箱子起点到终点的 BFS,一个是从人的位置到推箱子的位置的 BFS。注意记录箱子位置的访问状态要使用三维 vis[i][j][dir],因为从不同的位置推箱子产生的后续状态不同。 #include <iostream> #include <cstring> #include <queue> #include <a...

Intelligence1028的博客 392

hdu1254 推箱子

看到童年时的游戏了,嗯,推箱子。 双重搜索,第一层bfs搜索箱子可以到达的地方求最短路,第二层搜索人是否可以到达能推动箱子的地方dfs、bfs随意用个呗, 毕竟箱子如果有一面靠墙,那相反的方向那么也就不能走了,人总不能站在墙上推箱子的撒~ #include #include #include #include using namespace std; int m,n,map[10

葡萄架的程序猿 1386

推箱子 HDU1254

题目大意是在说给一张图,给定人的起点和终点,以及箱子的起始位置,问最少箱子推多少格可以到达终点。 感觉自己的做法稍微有点麻烦了。 先是使用五维的数组pushdir[a][b][c][d][i]表示人在(a,b)位置,箱子在(c,d)位置是否能往上下左右四个方向推动。例如人在(0,0),箱子在(3,5)可以往上下左右四个方向推那么pushdir[0][0][3][5][0]=pushdir[0]

Linnnnnger的博客 482

Hdu1254-推箱子(经典的推箱子游戏)-bfs

#include #include #include #include using namespace std; #define INF 1<<30 struct point{ int x,y; int step; bool operator==(const point&b)const{ if(this->x==b.x&&this->y==b.y) re

程序员的冷浪漫 2189
上一篇: hdu 1253 胜利大逃亡(广搜)
下一篇: 报名
asure__cpp
博客等级 码龄14年 8粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值