用「擴散」法對迷宮求解

2021-05-09 19:46:42 字數 607 閱讀 6403

上計算機網路時學了「擴散」的方法。感覺用在迷宮求解很合適。

先把地圖初始化為二維陣列,陣列裡面是乙個類的乙個物件。這個類有以下功能:

每乙個物件有乙個int型變數,盛放這個元素到初始點的最短距離。從初始點開始(此時距離為0),判斷周圍的物件是不是已經被「擴散」。如果沒有,相鄰物件距離加1,並把新物件座標放到乙個鍊錶;如果相鄰的已經被擴散,就不對它做任何改變;如果不能通過的位置,就不對這個位置處理。

class position

;例如地圖為20×20的。則開始時就這樣:position a[20][20];(其實這個類很簡單,直接用int型二維陣列就行)。

例如:先從初始點開始向四周擴散到四個相鄰的物件,每個物件都在乙個鍊錶中記錄,他們的距離值為1.下一步就是擴散距離為1的所有相鄰物件。它們的距離為2.把每乙個距離為2的都記錄乙個鍊錶。擴散完之後,釋放儲存距離為1的鍊錶。然後根據距離為2的鍊錶,擴散出距離為3的鍊錶,並相應設定其距離。直到擴散到目標位置或者不存在距離更高的位置(不能到達目的地)。

目標位置的距離就是最小距離。當要找路線是只需要根據這個點到出發點的距離,倒著找回去就可以了。

下面是乙個迷宮結果(*代表最佳路徑,#代表不可通過的,空白表示可以走的,@起始位置,$目標位置):

回溯法求解迷宮問題

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

回溯法求解迷宮問題

最近在leetcode上看了些演算法題,有些看著很簡單的很常用的東西,竟然一下子想不出來怎麼求解,比如說 實現sqrt函式,求陣列的排列。如果高數學的不好,這些看似簡單的問題,第一次碰到也會感覺很難求解,當然了,今天要說的是這樣乙個問題,求解迷宮的所有解,這個問題的求解用到了回溯法的思想,不了解這個...

用棧求解迷宮問題

問題描述 二維陣列mg m n 它表示乙個m n的迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的路線。include define maxsize 100 define m 8 define n 8 struct st maxsize ...