mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個7行5列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下:
1、每步移動可以且僅可以沿橫向(即向左或向右)拖動某一方塊一格:當拖動這一方塊時,如果拖動後到達的位置(以下稱目標位置)也有方塊,那麼這兩個方塊將交換位置(參見圖6到圖7);如果目標位置上沒有方塊,那麼被拖動的方塊將從原來的豎列中抽出,並從目標位置上掉落(直到不懸空,參見圖1和圖2);
2、任一時刻,如果在一橫行或者豎列上有連續三個或者三個以上相同顏色的方塊,則它們將立即被消除(參見圖1到圖3)。
注意:a) 如果同時有多組方塊滿足消除條件,幾組方塊會同時被消除(例如下面圖4,三個顏色為1的方塊和三個顏色為2的方塊會同時被消除,最後剩下乙個顏色為2的方塊)。
b) 當出現行和列都滿足消除條件且行列共享某個方塊時,行和列上滿足消除條件的所有方塊會被同時消除(例如下面圖5所示的情形,5個方塊會同時被消除)。
3、方塊消除之後,消除位置之上的方塊將掉落,掉落後可能會引起新的方塊消除。注意:掉落的過程中將不會有方塊的消除。
上面圖1到圖3給出了在棋盤上移動一塊方塊之後棋盤的變化。棋盤的左下角方塊的座標為(0, 0),將位於(3, 3)的方塊向左移動之後,遊戲介面從圖1變成圖2所示的狀態,此時在一豎列上有連續三塊顏色為4的方塊,滿足消除條件,消除連續3塊顏色為4的方塊後,上方的顏色為3的方塊掉落,形成圖3所示的局面。
第一行為乙個正整數n,表示要求遊戲關的步數。
接下來的5行,描述7*5的遊戲介面。每行若干個整數,每兩個整數之間用乙個空格隔開,每行以乙個0 結束,自下向上表示每豎列方塊的顏色編號(顏色不多於10種,從1開始順序編號,相同數字表示相同顏色)。
輸入資料保證初始棋盤中沒有可以消除的方塊。
如果有解決方案,輸出n行,每行包含3個整數x,y,g,表示一次移動,每兩個整數之間用乙個空格隔開,其中(x,y)表示要移動的方塊的座標,g表示移動的方向,1表示向右移動,-1表示向左移動。注意:多組解時,按照x為第一關鍵字,y為第二關鍵字,1優先於-1,給出一組字典序最小的解。遊戲介面左下角的座標為(0, 0)。
如果沒有解決方案,輸出一行,包含乙個整數-1。
31 02 1 0
2 3 4 0
3 1 0
2 4 3 4 0
3s2 1 13 1 1
3 0 1
樣例輸入的遊戲局面如圖6到圖11所示。依次移動的三步是:(2,1)處的方格向右移動,(3,1)處的方格向右移動,(3,0)處的方格向右移動,最後可以將棋盤上所有方塊消除。
資料規模如下:
對於30%的資料,初始棋盤上的方塊都在棋盤的最下面一行;
對於100%的資料,0 < n ≤ 5。
(1)不用列舉整個棋盤,只需要每列都搜尋到最高層即可。
(2)我們發現把(x,y)向右移和把(x+1,y)向左移是一樣的,不用重複搜尋,所以我們可以只向右交換,此外還應注意到空格不能移動,所以要判斷這種特殊情況。
(3)應注意到可能出現以下狀況:
(4)為了提高效率,防止乙個點被算不止一次,所以要等到全部搜尋完再統一消去。
NOIP2011 Mayan遊戲 搜尋
第一反應是搜尋題,想了一下如果用bfs的話,由於狀態過多,可能超記憶體,因此我用的dfs。這裡我們討論一下剪枝條件 如果當前狀態有一種顏色的數量小於3,那麼這種顏色就無法被消除,因此我們可以提前退出迭代。如果兩個連著的方塊顏色是相同的話,我們不用交換。如果兩個非空的方塊交換,我們只用考慮左邊那個方塊...
NOIP2011 Mayan遊戲 搜尋
乙個有效的剪枝是排除等效冗沉,當兩種操作形成等效效果時不重複搜尋 若有兩個塊,那麼左邊的右移和右邊的左移是等效的,由於題意認為右移優先於左移,所以這種情況只取右移,而乙個塊左邊是空的時候則要嘗試左移 在回溯法 還原 的時候,可以先複製出來局面,在函式裡開陣列 別用全域性的,要儲存多個局面 然後複製回...
noip2011 Mayan遊戲 dfs 模擬
能力太弱啊,調了一天。首先我bfs掛了,因為狀態太多而mle,好像只能dfs,然後bfs改dfs過程中傻x錯誤一大堆。這道題主要是模擬比較麻煩,消除塊的情況非常複雜。剪枝的話,如果乙個塊左邊有塊,就不用搜它向左移的情況,因為左邊的塊向右移會更優。剪這乙個應該就可以。還有總結這幾天做題經驗,一定謹慎使...