仓库:
GitHub - gorustyt/go-pathfinding: 原生go语言写的寻路算法库
实现算法:
dijkstra,a star,双向a star ,bfs(宽度优先搜索),dfs(深度优先搜索),jump point
参考js库:https://github.com/qiao/PathFinding.js
算法性能:
jump point>a star >Dijkstra>bfs>dfs,这里没有讨论双向和走不走对角的情况,因为性能肯定大于单向和不走对角。其中dfs 性能非常差,跑同样的地图,其他基本上都是0ms,而dfs 会花上几秒。
目前只实现了字符串的图来测试,图形化demo 打算用fyne 实现,等我写完更新
example:
package main
import (
"fmt"
pf "github.com/gorustyt/go-pathfinding"
)
func main() {
w, h := 50, 25
//创建地图
m := pf.NewGrid(w, h)
//设置不可行走
m.SetWalkableAt(5, 5, false)
m.SetWalkableAt(10, 10, false)
//开始a*寻路
m.PathFindingAStar(0, 0, w-1, h-1)
//打印地图的寻路
m.PathFindingPrint(pf.BiAStar, 0, 0, w-1, h-1)
fmt.Println("====================================================")
//打印地图的寻路
m.PathFindingPrint(pf.AStar, 0, 0, w-1, h-1)
}
结果:
- s代表起点
- w代表路径
- e代表终点
- 0代表可行走区域
- 1代表不可行走区域
图形调试界面demo
如何运行demo:
go run https://github.com/gorustyt/go-pathfinding/blob/main/example/demo/main.go
由于fyne 需要cgo ,所以得先安装gcc
喜欢欢迎大家点个赞,后面会完善该项目并出一些列文章
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_44505163/article/details/136162439