最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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尋路算法的評論 (共 條)

分享到微博請遵守國家法律
伊宁市| 陆丰市| 临沂市| 合水县| 昌邑市| 赣州市| 普宁市| 鄢陵县| 涿州市| 太仆寺旗| 鱼台县| 光山县| 益阳市| 三穗县| 宁城县| 衡山县| 那曲县| 江口县| 麻阳| 上栗县| 福清市| 文登市| 内黄县| 龙井市| 奉节县| 肥乡县| 上高县| 大名县| 峨眉山市| 丰顺县| 安阳县| 潜江市| 西昌市| 化州市| 高密市| 姚安县| 威海市| 开阳县| 呼和浩特市| 抚顺县| 吉首市|