洛谷P1312 Mayan遊戲

2021-08-07 17:12:24 字數 1261 閱讀 6291

【題目描述】見鏈結

【解析】

直接模擬和搜尋即可,注意儲存好資料,防止回溯時丟失。

【**】

//        mayan遊戲

//乙個模擬程度大於搜尋的搜尋題……

//大體模擬過程:移動--下降--消除--repeat--到達規定步數判斷是否消除完

//具體剪枝方案luogu上的其他題解都說的比較清楚了。

//不過根據本**注釋也許可以更好理解一些

//***************注意***************

//此**中行、列指的為輸入樣例中的行、列,不是指中的行、列。

#include

#include

#include

using

namespace

std;

int a[10][10],b[10][10],num[100],n,ans[10][4];

bool judge()//判斷是否全部消除完,只需看最左邊一列是否全為0即可。

void down()//讓懸浮的方塊下落

}}void remove()//消除過程

if (b[i][j]==b[i][j+1]&&b[i][j+1]==b[i][j-1])

}//具體解釋一下消除部分

//因為b陣列在消除過程中不發生改變,所以我們只要參照b陣列

//看哪個以格仔為中心,該格仔左右或者上下和該格仔相同(可消除),把a中要消的數字變為0即可。

//若一次消除的格仔為連續四個也不影響。具體為什麼就不多做解釋了,可以想一想

if (f)//發生過消除

}void dfs(int step)

}else

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

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

//該塊向右移

if(!(a[i-1][j]!=0||i-1

<1))

//1、如果左邊的塊不為空那麼就不換(解釋看下面)

//2、移動方塊操作不能越界

//該塊向左移(只有左邊為空時才移動,不然的話該操作等價於左邊的塊向右移動,重複浪費時間)

}}int main()

}//此處為讀入,不解釋

dfs(1);//開始搜尋

cout

<<-1;//如果搜尋過程中沒有「找到結果輸出後exit」這一步,就代表無解

}

洛谷P1312 Mayan遊戲

題目 搜尋 剪枝 對於每個操作都只需要模擬就可輕鬆得出每一步操作的 這個題需要考慮回溯操作,由於搜尋是在一棵搜尋樹中,因此我們可以記錄每乙個深度的回溯狀態,僅僅用乙個陣列會出現狀態轉移失誤的情況,所以需要用多個陣列。然後考慮剪枝,如果交換不交換沒有區別,則不需要交換,而且i向左交換等同於i 1向右交...

洛谷P1312 Mayan遊戲(深搜)

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

再做一遍 洛谷 P1312Mayan遊戲

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