日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漫画:什么是A*寻路算法

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:什么是A*寻路算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??玻璃貓 程序員小灰

比如像這樣子:

第一步:把起點放入OpenList

第二步:找出OpenList中F值最小的方格,即唯一的方格Node(1,2)作為當前方格,并把當前格移出OpenList,放入CloseList。代表這個格子已到達并檢查過了。

第三步:找出當前格上下左右所有可到達的格子,看它們是否在OpenList當中。如果不在,加入OpenList,計算出相應的G、H、F值,并把當前格子作為它們的“父親節點”。

圖中,每個格子的左下方數字是G,右下方是H,左上方是F。

Round2 ~ 第一步:找出OpenList中F值最小的方格,即方格Node(2,2)作為當前方格,并把當前格移出OpenList,放入CloseList。代表這個格子已到達并檢查過了。

Round2 ~ 第二步:找出當前格上下左右所有可到達的格子,看它們是否在OpenList當中。如果不在,加入OpenList,計算出相應的G、H、F值,并把當前格子作為它們的“父親節點”。

為什么這一次OpenList只增加了兩個新格子呢?因為Node(3,2)是墻壁,自然不用考慮,而Node(1,2)在CloseList當中,說明已經檢查過了,也不用考慮。

Round3 ~ 第一步:找出OpenList中F值最小的方格。由于這時候多個方格的F值相等,任意選擇一個即可,比如Node(2,3)作為當前方格,并把當前格移出OpenList,放入CloseList。代表這個格子已到達并檢查過了。

Round3 ~ 第二步:找出當前格上下左右所有可到達的格子,看它們是否在OpenList當中。如果不在,加入OpenList,計算出相應的G、H、F值,并把當前格子作為它們的“父親節點”。

剩下的就是以前面的方式繼續迭代,直到OpenList中出現終點方格為止。這里就僅用圖片簡單描述了,方格中數字表示F值:

public?Node aStarSearch(Node start, Node end) {

// 把起點加入 open list

openList.add(start);

//主循環,每一輪檢查一個當前方格節點

while?(openList.size() >?0) {

// 在OpenList中查找 F值最小的節點作為當前方格節點

Node current = findMinNode();

// 當前方格節點從open list中移除

openList.remove(current);

// 當前方格節點進入 close list

closeList.add(current);

// 找到所有鄰近節點

List<Node> neighbors = findNeighbors(current);

for?(Node node : neighbors) {

if?(!openList.contains(node)) {

//鄰近節點不在OpenList中,標記父親、G、H、F,并放入OpenList

markAndInvolve(current, end, node);

}

}

//如果終點在OpenList中,直接返回終點格子

if?(find(openList, end) !=?null) {

return?find(openList, end);

}

}

//OpenList用盡,仍然找不到終點,說明終點不可到達,返回空

return null;

}

幾點說明:

1.這里對于A*尋路的描述做了很大的簡化。實際場景中可能會遇到斜向移動、特殊地形等等因素,有些時候需要對OpenList中的方格進行重新標記。

2.截圖中的小游戲可不是小灰開發的,而是一款經典的老游戲,有哪位小伙伴玩過嗎?


總結

以上是生活随笔為你收集整理的漫画:什么是A*寻路算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。