在乙個7行5列的期盤中,有至多10種顏色的方塊。當這些方塊下方空的時候,這些方塊總是會垂直掉落#### 當有3個顏色相同的方塊排成一行或一列時,它們會被同時消除
你需要在給定的步數內,通過調換相鄰方塊,使棋盤上沒有方塊。
若做不到,輸出-1;不然輸出1種方法(要移動的方塊的x、y座標 + 移動方向) (移動方向 1 = 右移,-1 = 左移)
【注】當有多組解時,以x為第1關鍵字,以y為第2關鍵字,且1優於-1。故輸出是唯一的
【注】棋盤讀入格式:共有5行,每行以0結尾,代表從左至右每列上從下到上的方塊顏色,每行至多8個數還是比較常規的dfs題
按照題意來,每次dfs列舉要移動的方塊時,以x為第1關鍵字,以y為第2關鍵字
右移條件:首先選定的格仔要有方塊;其次右邊有格仔,且要交換的兩個方塊顏色不同
左移條件:首先選定的格仔要有方塊;其次左邊有格仔,且左邊沒有方格(不然還不如右移)
移完判斷清除和掉落,若步數大於n或當前有任意顏色的棋子只有1、2個,則return
若條件符合,直接輸出
class裡面把『n』達成『n』
#include
#include
#include
#define n 7
#define m 5
using
namespace std;
void
swap
(int
&a,int
&b)int n, x[11]
, y[11]
, p[11]
;class
class_table
bool
clear()
}for
(int i =
1; i <= n; i++)}
return res;
}void
drop()
for(
int i =
1; i <= cnt; i++
) table[i]
[j]= tmp[i]
;for
(int i = cnt +
1; i <= n; i++
) table[i]
[j]=0;
}}void
swap
(int x1,
int y1,
int x2,
int y2)
bool
invalid()
bool
finished()
} now;
void
print
(int dep)
void
dfs(
int dep)
if(j >1&&
!temp.table[i]
[j -1]
)}}}
}int
main()
NOIP2011 洛谷1312 Mayan遊戲
題目描述 mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方...
洛谷P1312 Mayan遊戲
題目描述 見鏈結 解析 直接模擬和搜尋即可,注意儲存好資料,防止回溯時丟失。mayan遊戲 乙個模擬程度大於搜尋的搜尋題 大體模擬過程 移動 下降 消除 repeat 到達規定步數判斷是否消除完 具體剪枝方案luogu上的其他題解都說的比較清楚了。不過根據本 注釋也許可以更好理解一些 注意 此 中行...
洛谷P1312 Mayan遊戲
題目 搜尋 剪枝 對於每個操作都只需要模擬就可輕鬆得出每一步操作的 這個題需要考慮回溯操作,由於搜尋是在一棵搜尋樹中,因此我們可以記錄每乙個深度的回溯狀態,僅僅用乙個陣列會出現狀態轉移失誤的情況,所以需要用多個陣列。然後考慮剪枝,如果交換不交換沒有區別,則不需要交換,而且i向左交換等同於i 1向右交...