洛谷P1312 Mayan遊戲

2022-03-17 15:02:59 字數 1136 閱讀 8185

題目

搜尋+剪枝

對於每個操作都只需要模擬就可輕鬆得出每一步操作的**。

這個題需要考慮回溯操作,由於搜尋是在一棵搜尋樹中,因此我們可以記錄每乙個深度的回溯狀態,僅僅用乙個陣列會出現狀態轉移失誤的情況,所以需要用多個陣列。然後考慮剪枝,如果交換不交換沒有區別,則不需要交換,而且i向左交換等同於i-1向右交換,判斷一下是否有有漏解就可以無重複的列舉了。

#include #include using namespace std;

struct dat

ans[10001];

int n, now, flag;

int b[7][9], a[7][9];

int v[7][9][10];// v是每一列從下到上的數排列起來,需要多加一位從而方便回溯,dp和搜尋在無法再找到解題方式的時候,增加一維狀態往往是一種好方法。

void cv (int now)//now是當前處於第幾步 *之後*

void print()

void down()//使當前所有浮在空中的方塊下落。 }}

bool lose()

if (!flag) return 0;

for (int i = 1; i <= 5; i++)

for (int j = 1; j <= 7; j++)

// print();

return 1;

}void move(int i, int j, int g)

bool check()//判斷當前是否所有數都被刪除了。

void dfs(int now)

if (now == n + 1) return;

cv(now);//將當前的狀態記錄下來。

for (int i = 1; i <= 5; i++)

for (int j = 1; j <= 7; j++)

if (i - 1 >= 1 && a[i - 1][j] == 0)

}}int main()

dfs(1);

printf("-1");

return 0;}/*

31 0

2 1 0

2 1 4 0

2 4 0

4 0*/

洛谷P1312 Mayan遊戲

題目描述 見鏈結 解析 直接模擬和搜尋即可,注意儲存好資料,防止回溯時丟失。mayan遊戲 乙個模擬程度大於搜尋的搜尋題 大體模擬過程 移動 下降 消除 repeat 到達規定步數判斷是否消除完 具體剪枝方案luogu上的其他題解都說的比較清楚了。不過根據本 注釋也許可以更好理解一些 注意 此 中行...

洛谷P1312 Mayan遊戲(深搜)

mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方塊一格 當...

再做一遍 洛谷 P1312Mayan遊戲

mayan puzzle是最近流行起來的乙個遊戲。遊戲介面是乙個 7 行5 列的棋盤,上面堆放著一些方塊,方塊不能懸空堆放,即方塊必須放在最下面一行,或者放在其他方塊之上。遊戲通關是指在規定的步數內消除所有的方塊,消除方塊的規則如下 1 每步移動可以且僅可以沿橫向 即向左或向右 拖動某一方塊一格 當...