国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

dikjstra尋路算法

2023-07-28 13:10 作者:李偉_Li慢慢  | 我要投稿

至今,我偶爾會遇到一些尋路的尋求,雖然是偶爾,但時間久了,也就多了。

我對尋路是沒有太多研究的,所以就去B站搜了一下,搜到一個很棒的dikjstra教程。

我照著這個教程,用ts寫了一下這個邏輯,分享給大家。

整體代碼如下:

最終,console.log(optimal) 輸出的結(jié)果就是:[4, 5, 6, 7, 0]

這與dikjstra教程里的結(jié)果是一致的。

根據(jù)這個教程內(nèi)容,做個筆記。

已知:

  • 節(jié)點關(guān)系map,即每個節(jié)點的鄰點

  • 節(jié)點距離segmentLengthMap,存在聯(lián)系的兩個節(jié)點間的距離

  • 起點start為0

  • 終點end為4

注:上圖的節(jié)點距離并非通過兩點間的距離公式算出來的,所以我們不能通過線段長度來區(qū)分距離的大小。

求:起點到終點的最短路徑

解:

1.對起點做標(biāo)記,將起點添加到標(biāo)記點集合mark中。

起點的路徑距離默認(rèn)為0,路徑距離就是節(jié)點到起點的路徑距離,所以起點到起點的默認(rèn)距離為0。

起點的前面點默認(rèn)為undefined,因為起點就是最源頭的點,沒有前面點。

2.讓未標(biāo)記點集合unmark等于map中除start之外的所有點。

3.遍歷當(dāng)前標(biāo)記點(第一個標(biāo)記點就是起點)的鄰點。

若鄰點在標(biāo)記點集合mark中,跳過此點;

否則,若當(dāng)前鄰點過當(dāng)前標(biāo)記點的路徑距離小于當(dāng)前節(jié)點的已記錄過的路徑距離,則:

  • 更新當(dāng)前鄰點的路徑距離為當(dāng)前鄰點過當(dāng)前標(biāo)記點的路徑距離。

  • 更新當(dāng)前鄰點的前面點為當(dāng)前標(biāo)記點。

4.遍歷未標(biāo)記點集合unmark,從中找出路徑最短的點nearest。

對nearest點做標(biāo)記,將其添加到mark中,并從unmark中刪除。

5.若unmark不為空,以nearest點為標(biāo)記點,重復(fù)3,4,5步驟。

當(dāng)unmark為空的時候,所有的節(jié)點就都完成了標(biāo)記。

6.對終點進(jìn)行回溯,尋找其前面點的前面點的前面點的前面點……,直到找到其源頭的點-起點。

把上面的一堆前面點按序連在一起,就是最短路徑了。

參考鏈接:https://www.bilibili.com/video/BV1zz4y1m7Nq/?spm_id_from=333.337.search-card.all.click&;vd_source=fc98bc82ca25234b3a3030baea035443

dikjstra尋路算法的評論 (共 條)

分享到微博請遵守國家法律
榆社县| 兴宁市| 遂宁市| 游戏| 丹凤县| 东宁县| 本溪市| 普兰店市| 芮城县| 太白县| 凤山市| 叶城县| 隆子县| 陇川县| 潼关县| 晋宁县| 荆门市| 珲春市| 桐城市| 海兴县| 山阳县| 岑溪市| 闸北区| 东辽县| 嘉峪关市| 桃源县| 门头沟区| 万盛区| 长丰县| 新巴尔虎左旗| 五台县| 文成县| 滨海县| 象山县| 临猗县| 徐州市| 上饶市| 崇礼县| 乐平市| 万全县| 西宁市|