A 演算法計算步驟總結

2021-08-31 09:26:32 字數 1484 閱讀 1923

a*演算法計算步驟總結

1,從點a開始,並且把它作為待處理點存入乙個「開啟列表」。儘管現在列表裡只有乙個元素,但以後就會多起來。你的路徑可能會通過它包含的方格,也可能不會,這是乙個待檢查方格的列表。

2,尋找a點周圍所有可到達或者可通過的方格,跳過有牆,水,或其他無法通過地形的方格。也把他們加入開啟列表。儲存點a作為所有這些方格的「父方格」。

3,從開啟列表中刪除點a,把它加入到乙個「關閉列表」,列表中儲存所有不需要再次檢查的方格。

4,按照公式f=g+h計算a點所有周圍點的f值,從開啟列表中選擇f值最低的方格,記為#1方格。把它從開啟列表中刪除,然後新增到關閉列表中。

5,檢查#1方格所有相鄰方格。跳過那些已經在關閉列表中的或者不可通過的(有牆,水的地形,或者其他無法通過的地形)。

6,如果有相鄰方格還不在開啟列表中,把他們新增進開啟列表。把選中的#1方格作為新的方格的父節點。

如果某個相鄰方格已經在開啟列表裡了,檢查現在的這條路徑是否更好。換句話說,檢查如果我們用新的路徑(a->#1->該相鄰格)到達它的話,g值是否會更低一些(即,比「a->該相鄰格」原來路徑的g值是否更低)。如果不是,那就繼續檢查其他已經在開啟列表裡的相鄰格仔;如果有方格的g值更低,該方格就作為#1方格的下乙個方格,同時把該相鄰方格的父節點改為目前選中的#1方格,重新計算該方格周圍相鄰方格的f和g的值。如果所有方格的g值都不是更低,那就放棄所有的已經在開啟列表裡的相鄰格仔作為#1方格的下一步方格;

如果#1方格的相鄰方格都已經在開啟列表中,並且經檢查g值都不低,那麼放棄#1作為a的下乙個方格。然後按照f值最低原則選擇開啟列表裡其他方格作為a點的下乙個方格。

如果#1方格有新放進開啟列表的方格,則檢查新新增進開啟列表的所有相鄰方格,選其中f值最低的方格作為#1方格的下乙個方格。如下圖所示,當新加入開啟列表的方格和原來在開啟列表的方格都有時,如何處理?

7,我們重複這個過程,直到目標格被新增進關閉列表。

8、從紅色的目標格開始,按箭頭的方向朝父節點移動。這最終會引導你回到起始格,這就是你的路徑!

總結演算法設計的步驟

昨天參加了美團的校園招聘筆試,大部分是演算法設計題,所以打算總結一下演算法設計的步驟。其中又一道題目是這樣的 有乙個mxn的矩陣,每一行從左到右是公升序的,每一列從上到下是公升序的。請實現乙個函式,在矩陣中查詢元素elem,找到則返回elem的位置。題設只說了行和列是公升序的,我在草稿紙上畫了乙個3...

計算機演算法總結

本文主要是通過通俗易懂的演算法和自然語言,向大家介紹基礎的計算機排序演算法和查詢演算法,還有一些作為一名程式猿應該知道的名詞,資料結構,演算法等等.但是僅僅止於介紹,因為本人能力不足,對一些高階的演算法和資料結構理解不夠通透,所以也不作太多的深入的剖析 demo都在我的github中能找得到。同樣的...

RSA演算法詳細計算步驟(簡單,純乾貨)

網上都說簡單,但是我覺得這個過程事實上還是挺複雜的,這個論述不陳述原因,只陳述過程。首先明確我們的根本目的 我們是要加密乙個資訊,再解密乙個資訊。加密這個資訊的方法 找到兩個質數p和q,把他們倆乘起來得到n pq 隨便找乙個數字e,這個數字要滿足 e,n 1 e,phi n 1 e,n 1 這個原因...