Merge branch ‘master’ of gitlink.org.cn:ana77/PathForge
PathForge 是一个使用 MoonBit 编写的图搜索与网格寻路工具库。它把常见寻路算法封装成可复用的基础库,而不是只提供一个一次性的演示程序。
本项目面向 MoonBit 开源生态建设赛题,选题聚焦于推荐方向中的 图算法库 与 Pathfinding 工具库。
寻路算法既是基础算法问题,也有非常明确的真实使用场景:
MoonBit 适合这个方向,因为同一套核心库后续可以用于命令行工具、测试程序,也可以继续扩展为 WebAssembly 可视化演示。
. |-- graph.mbt # 图结构、BFS、Dijkstra 和 A* |-- grid.mbt # 基于 Graph 的网格地图适配层 |-- priority_queue.mbt # Dijkstra 和 A* 使用的最小优先队列 |-- path_report.mbt # 路径搜索结果结构 |-- pathforge_test.mbt # 单元测试 |-- cmd/main/main.mbt # 命令行演示入口 |-- docs/selection.md # 赛题选题说明 |-- moon.mod.json # MoonBit 模块配置 `-- moon.pkg.json # 根包配置
安装 MoonBit 后,在项目根目录运行:
moon check moon test moon run cmd/main
演示程序的预期输出:
PathForge demo found: true cost: 15 visited: 29 path length: 16
let grid = @pathforge.Grid::new(8, 5) grid.set_blocked(@pathforge.Point::{ x: 2, y: 0 }, true) grid.set_blocked(@pathforge.Point::{ x: 2, y: 1 }, true) let result = grid.astar( @pathforge.Point::{ x: 0, y: 0 }, @pathforge.Point::{ x: 7, y: 4 }, ) println("found: \{result.found}") println("cost: \{result.cost}")
Graph 使用邻接表保存节点和带权边。bfs 适合所有边代价相同的场景,用于寻找最少步数路径。dijkstra 适合边代价不同的场景,用于寻找总代价最低的路径。astar 在 Dijkstra 的基础上加入启发函数,让搜索过程更倾向于目标方向。
Graph
bfs
dijkstra
astar
Grid 是更高层的网格地图适配器。它把二维网格转换为图结构,将被阻塞的格子视为障碍物,并提供基于 Point 坐标的寻路接口,使用者不需要直接处理底层节点编号。
Grid
Point
推荐中文描述:
使用 MoonBit 实现的图搜索与网格寻路工具库,支持 BFS、Dijkstra 和 A* 算法。
推荐英文描述:
A MoonBit graph search and grid pathfinding toolkit with BFS, Dijkstra and A*.
推荐初始提交信息:
feat: implement PathForge graph and grid pathfinding toolkit
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PathForge
PathForge 是一个使用 MoonBit 编写的图搜索与网格寻路工具库。它把常见寻路算法封装成可复用的基础库,而不是只提供一个一次性的演示程序。
本项目面向 MoonBit 开源生态建设赛题,选题聚焦于推荐方向中的 图算法库 与 Pathfinding 工具库。
功能特性
为什么选择寻路工具库
寻路算法既是基础算法问题,也有非常明确的真实使用场景:
MoonBit 适合这个方向,因为同一套核心库后续可以用于命令行工具、测试程序,也可以继续扩展为 WebAssembly 可视化演示。
项目结构
快速开始
安装 MoonBit 后,在项目根目录运行:
演示程序的预期输出:
使用示例
核心设计
Graph使用邻接表保存节点和带权边。bfs适合所有边代价相同的场景,用于寻找最少步数路径。dijkstra适合边代价不同的场景,用于寻找总代价最低的路径。astar在 Dijkstra 的基础上加入启发函数,让搜索过程更倾向于目标方向。Grid是更高层的网格地图适配器。它把二维网格转换为图结构,将被阻塞的格子视为障碍物,并提供基于Point坐标的寻路接口,使用者不需要直接处理底层节点编号。后续规划
GitHub 仓库描述
推荐中文描述:
推荐英文描述:
推荐初始提交信息: