此題是一道比較明顯但又麻煩的廣搜題,經典的走迷宮求最少步驟的題
由於這個題的狀態有些麻煩,我們建立乙個三元組結構體(x,
y,li
e)
(x,y,lie)
(x,y,l
ie),x,y
x,yx,
y表示座標,lie
lieli
e表示現在是立著的還是橫著躺或是豎著躺
l ie
=0
lie=0
lie=
0,表示立著,且座標為x,y
x,yx,yli
e=
1lie=1
lie=
1,表示橫著躺,且左半部分為x,y
x,yx,yli
e=
2lie=2
lie=
2,表示豎著躺,且上半部分為x,y
x,yx,
y
int next_x[3]
[4]=
,,};
int next_y[3]
[4]=
,,};
int next_lie[3]
[4]=
,,};
3
33種狀態,4
44個滾動方向
建議在做這個預處理的時候可以實物模擬一下,4399小遊戲裡有
模擬鏈結
#include
#include
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
using
namespace std;
const
int maxn=
1e6+10;
const
int maxm=
1000+10
;int m,n,ans;
char s[maxm]
[maxm]
;int dis[maxm]
[maxm][4
];struct node
;queue q;
node start,en;
int next_x[3]
[4]=
,,};
int next_y[3]
[4]=
,,};
int next_lie[3]
[4]=
,,};
bool
check
(node nex)
intbfs()
}}return-1
;}void
readdata()
,en;
rep(i,
1,n);if
(s[i]
[j]==
'x'&& start.x==-1
);else
if(s[i+1]
[j]==
'x') start=
;else start=;}
}}s[start.x]
[start.y]
=s[en.x]
[en.y]
='.'
;int ans=
bfs();
if(ans==-1
)printf
("impossible\n");
else
printf
("%d\n"
,ans);}
}int
main()
AcWing 172 立體推箱子(bfs)
立體推箱子是乙個風靡世界的小遊戲。遊戲地圖是乙個n行m列的矩陣,每個位置可能是硬地 用 表示 易碎地面 用 e 表示 禁地 用 表示 起點 用 x 表示 或終點 用 o 表示 你的任務是操作乙個1 1 2的長方體。這個長方體在地面上有兩種放置形式,立 在地面上 1 1的面接觸地面 或者 躺 在地面上...
立體推箱子2 Poj3323 可打表
達達發明了一種立體推箱子遊戲。他發明的遊戲裡並沒有那麼多的規則和限制,在他的設定裡遊戲具有無限的平面空間,並且所有的區域都屬於硬地。關於立體推箱子遊戲的各種概念和設定請參考172題 終點永遠都位於座標 0,0 處的情況下,請你求出從起點到終點所需的最少移動次數是多少。輸入包含多組測試用例。每組測試資...
推箱子遊戲
大一寒假 1.寫 時我犯了乙個很大的錯誤 不然早就搞定了 把 與 混淆了 大忌啊 2.這裡實現了數位化編碼 3.上72 下80 左75 右77 4.特殊圖形可以到qq拼音符號裡獲取 include include include define x 1 人的位置 define y 5 define n...