随笔 - 934, 文章 - 0, 评论 - 249, 阅读 - 345万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

A*算法golang实现的open、close列表的实现调研

Posted on   蝈蝈俊  阅读(1250)  评论(0编辑  收藏  举报

https://github.com/beefsack/go-astar

有完整的测试案例,代码全面性最好。
实现在 https://github.com/beefsack/go-astar/blob/master/astar.go

集成 open 和 close 在node类,然后用map管理这个node类****

// node is a wrapper to store A* data for a Pather node.
type node struct {
    pather Pather
    cost   float64
    rank   float64
    parent *node
    open   bool
    closed bool
    index  int
}
// nodeMap is a collection of nodes keyed by Pather nodes for quick reference.
type nodeMap map[Pather]*node

https://github.com/nickdavies/go-astar

推荐用这个。
使用map管理open、close列表
相关代码在:https://github.com/nickdavies/go-astar/blob/master/astar/astar.go

var openList = make(map[Point]*PathPoint)
var closeList = make(map[Point]*PathPoint)

同时实现一个寻找map中最小权重的节点函数

func (a *gridStruct) getMinWeight(openList map[Point]*PathPoint) *PathPoint {
    var min *PathPoint = nil
    var minWeight int = 0

    for _, p := range openList {
        if min == nil || p.Weight < minWeight {
            min = p
            minWeight = p.Weight
        }
    }
    return min
}

https://github.com/towski/Golang-AStar

用数组管理
https://github.com/towski/Golang-AStar/blob/master/utils/utils.go

var openList, closeList, path []Point

存在检查、查找都是用了数组遍历。

github.com/fzipp/astar

close队列使用的是map, open队列使用的优先队列

  closed := make(map[Node]bool)
    pq := &priorityQueue{}
    heap.Init(pq)
    heap.Push(pq, &item{value: newPath(start)})

open 列表找最小没找到实现代码。

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2016-02-29 Android SDK Manager 设置代理
2016-02-29 Android 上的代码阅读器 CoderBrowserHD 修改支持 go 语言代码
点击右上角即可分享
微信分享提示