172 立體推箱子

2021-09-27 09:22:37 字數 1770 閱讀 7644

此題是一道比較明顯但又麻煩的廣搜題,經典的走迷宮求最少步驟的題

由於這個題的狀態有些麻煩,我們建立乙個三元組結構體(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...