无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

分享到微博請遵守國家法律
萨迦县| 房产| 雅江县| 衡南县| 西丰县| 虹口区| 巴彦淖尔市| 上虞市| 德庆县| 沙河市| 哈巴河县| 阿城市| 思南县| 贵南县| 湛江市| 台东市| 临夏市| 新化县| 孟州市| 禹州市| 柳江县| 甘孜县| 颍上县| 西乌珠穆沁旗| 阜阳市| 丹东市| 额济纳旗| 星子县| 饶平县| 兴国县| 巩义市| 灌云县| 岳普湖县| 微山县| 九寨沟县| 阜城县| 嘉定区| 泰宁县| 洛扎县| 西乡县| 杭锦后旗|