立体推箱子
题目来源
解题思路
这道题有点恶心,主要是长方体的状态难处理,你要考虑它是站着还是躺着,而且躺着还分竖着躺和横着躺,卡在这里很久。后来豁然开朗,用一个t来表示长方体的状态,t=0表示站立在(x,y)上,t=1表示横着躺,右半部分在(x,y)上,t=2表示竖着躺,下半部分在(x,y)上。接下来就直接BFS就好了
Code
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x1,y1,px[2500005],py[2500005],pt[2500005],ps[2500005],a[505][505],c[505][505][5],dx[4][4]={
{
},{
-1,0,2,0},{
-1,0,1,0},{
-2,0,1,0}},dy[4][4]={
{
},{
0,2,0,-1},{
0,1,0,-2},{
0,1,0