回溯法求解消消樂實驗

2021-09-25 01:16:14 字數 1387 閱讀 5293

掌握回溯法設計思想。

掌握消消樂問題的回溯法解法。

《開心消消樂》是一款樂元素研發的三消類休閒遊戲。遊戲中消除的物件為小動物的頭像,包括小浣熊、小狐狸、小青蛙和小雞等動物頭像。玩家通過移動動物頭像位置湊夠同行/同列3個或3個以上即可消除。

消除塊:就是對這個塊劃十字(下圖情況為舉例,實際上不會有這種情況)。

向下塌陷:消除時記錄下最左、最右、最下邊消除的塊。從最下往上、從最左最右遍歷,如果(x, y)處沒有塊,向上找到第乙個塊交換。塌陷後檢查塌下來的塊有無可以被消除的,迴圈。

檢查:檢查同樣只要檢查最左到最右、最下到頂這麼一小塊,因為只有這個範圍內的塌陷了,要有能繼續消的也在這個範圍。

交換兩塊:交換兩塊,然後嘗試消去(兩塊都嘗試),如果能消去就塌陷、檢查。

回溯沒啥好說的,把樹畫出來一看就明白了。

存下遍歷過的每一張圖

用map存下《圖, 分》對,對當前的圖,拿出map中對應圖,若當前得分小於map中訪問的分,剪枝;否則更新分值。

注意這種方法可能不能得到最優解,準確率在99%左右(請自己測一下),原因如下:

如果經過x步到達了第n個地圖狀態,且此時為該狀態最大分數scorex,更新了map[n] = scorex。但是或許會存在當某一次到達n狀態時,其分數scorey < scorex,但步數y < x,在有步數限制的情況下,未來將有機會在分數上超過前者。

概率剪枝

對m*n的隨機棋盤做多次無剪枝回溯,得到k步得分平均資料。則在當前棋盤,若最大得分為p,步數限制為maxstep,當前第k步已得q分,如果q + (maxstep步平均分- 當前步數平均分) < p,剪掉。

為提公升準確率,剪枝條件改為q + (maxstep步平均分 -當前步數平均分) < w * p。可見w越小準確率越高,但速度會變慢。

這種剪枝當然也會有概率不能得到最優解,準確率視w而不同(請自測)。

演算法實驗 回溯法求解0 1揹包問題

通過剪枝和衝突,走遍所有可能的選擇,最終得到最優解 1 每個節點有兩種選擇方法,依次對所有可能的方法進行遍歷 2 在遍歷的過程中通過設定一全域性變數用來比較所有的解法的結果,最終得到最優解 lagestv 0bestx 1 2 def jianzhi i,n,c,w,ww if i n return...

回溯法 求解皇后問題

include include using namespace std static char queen 8 8 建立乙個棋盤 static int a 8 static int b 15 static int c 15 static int iqueennum 0 記錄總的棋盤狀態數 voidq...

回溯法求解迷宮問題

題目 這是我在老師發的ppt上發現的一道題,如下 1表示起點 7表示終點,一共六個路口,每個路口可以通達最多左上右三個路口,不能走的方向用0表示,求從1到7的路徑。求解思路 每個路口最多有三個搜尋分支。把演算法設計為如下的搜尋過程 把整個搜尋分解為向左 向前和向右三個方向上子問題的搜尋。當搜尋到某個...