立體推箱子2 Poj3323 可打表

2022-02-15 23:28:27 字數 2195 閱讀 3956

達達發明了一種立體推箱子遊戲。

他發明的遊戲裡並沒有那麼多的規則和限制,在他的設定裡遊戲具有無限的平面空間,並且所有的區域都屬於硬地。(關於立體推箱子遊戲的各種概念和設定請參考172題)

終點永遠都位於座標(0,0)處的情況下,請你求出從起點到終點所需的最少移動次數是多少。

輸入包含多組測試用例。

每組測試資料在一行內,格式為 c x y,其中 c 為乙個字母,x 和 y 是兩個整數。

這表示長方體覆蓋住了平台上的格仔(x, y),且其狀態為 c。

若 c 為字母 u,表明長方體是豎立的。

若 c 為字母 v,表明長方體與 x 軸平行,且其覆蓋的另乙個格仔為(x + 1, y)。

若 c 為字母 h,表明長方體與 y 軸平行,且其覆蓋的另乙個格仔為(x, y + 1)。

對於每個測試用例,輸出乙個佔一行的整數,表示所需的最少移動次數。

0≤x,y≤1000000000
u 0 0

h 0 0

v 1 0

輸出樣例:

0

41

首先宣告, 下表是從(0, 0)開始

h 用 a(i, j), b(i, j + 1) 的 a 表示當前座標

v 用 a(i, j) b(i + 1, j) 的 a 表示當前座標

對於所有 i % 3 == 0, j % 3 == 0, 的(i, j) u 的狀態 我們可以直接算(自己理解一下)

並稱 (i, j) 這個可以直接算的點為 [標狀態] (i % 3 == 0, j % 3 == 0, x == 'u')

所以我們就是先讓題目給的狀態, 轉移到乙個 [標狀態] (i % 3 == 0, j % 3 == 0, x == 'u')

任何乙個(i, j) x狀態 都處在乙個九宮格,

g0 g1 g2

g3 g4 g5

g6 g7 g8 (每個都是乙個九宮格)

我們假設 (i, j) 在九宮格 g4 中

那我們的目的就是, 把(i, j) 轉移到

g3 g4 g6 g7 這四個九宮格內的 [標狀態], 然後就翻滾到(0, 0)

所以取這幾個的 min就行了

(題目給的都是非負數, 可以少考慮一些, 是負數稍微改改也能過)

以上是基本思路, 實際上只需要轉移到 g3 g4 g6 (畢竟是對稱的)

然後就先dfs求一邊最小步數, 然後以後查詢都是0(1)

解釋一下, 主要變數

d[i][j][k][g] (i,j)是在九宮格內的座標 ((0,0) ~ (2,2))

k 表狀態 'u' 對應 0, 'v' 對應 1, 'h' 對應 2

g 表轉移到哪個九宮格

0 表示 g4 到 g4 的 [標狀態]

1 g4 到 g3 的 [ ]

2 g4 g6 的 [ ]

怎麼計算我就不說了吧

想要打表也可以

d[3][3][3][3] = 

, , }, , , }, , , },

, , }, , , }, , , },

, , }, , , }, , , }};

#include #define rep(i,a,b) for(int i=a;i<=b;++i)

using namespace std;

typedef long long ll;

struct node t, cur;

int dx[3][4] = , , };

int dy[3][4] = , , };

int dz[3][4] = , , };

int mp[9][9][3], d[3][3][3][4];

void bfs(int x, int y, int z)

); memset(mp, -1, sizeof mp); mp[x][y][z] = 0;

while (!q.empty())

}}void init()

}ll a, b;

char op;

ll calc(int c)

int main()

return 0;

}

172 立體推箱子

此題是一道比較明顯但又麻煩的廣搜題,經典的走迷宮求最少步驟的題 由於這個題的狀態有些麻煩,我們建立乙個三元組結構體 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,表示...

AcWing 172 立體推箱子(bfs)

立體推箱子是乙個風靡世界的小遊戲。遊戲地圖是乙個n行m列的矩陣,每個位置可能是硬地 用 表示 易碎地面 用 e 表示 禁地 用 表示 起點 用 x 表示 或終點 用 o 表示 你的任務是操作乙個1 1 2的長方體。這個長方體在地面上有兩種放置形式,立 在地面上 1 1的面接觸地面 或者 躺 在地面上...

CDN價格戰外P2P重獲關注,誰才是幕後推手

避而不談傳統cdn領域屢屢爆出的 戰,最近在p2p cdn的技術領域,市場似乎掀起了一場看不見硝煙的戰鬥。在cdn這個頻頻製造 顛覆 革命 概念的領域,兩大網際網路巨頭紛紛祭出p2p技術所謂 新概念 又一場技術產品公升級大戰是否已經正式拉響?以製造新提法來吸引市場使用者眼球的模式是否又被網際網路廠商...