#寻路 #A*搜索 #2D网格

nightly seastar

无依赖、非泛型的A*寻路算法实现

2个不稳定版本

0.2.0 2023年3月27日
0.1.0 2023年3月23日

#1633 in 算法

每月24次下载

MIT/Apache

26KB
265

Seastar


terminal screenshot showing off paths from start to end

特性

seastar 是一个无依赖、非泛型的A*寻路算法实现。它专门设计用于操作二维网格的瓷砖,沿正方向(北、东、南、西)。

您可以在 seastar.sombia.com 查看库的实际应用。

我不一定推荐使用此库代替 pathfinding 包,但我希望有一个不同的API用于我的特定用例,以及更深入理解算法。

使用

cargo add seastar
use seastar::{astar, Point};

fn main() {
    // A grid needs to be a 2D vector of `Option`s. `None` represents an
    // empty tile, while `Some(())` represents a blocked tile.
    let grid = vec![
        vec![None, None, Some(())],
        vec![Some(()), None, None],
        vec![None, None, None],
    ];

    let start = Point { x: 0, y: 0 }; // top left corner
    let end = Point { x: 2, y: 2 }; // bottom right corner

    // Assuming a path is found, `path` will be a `Vec<Point>` where each point is
    // a step in the path from `start` to `end`.
    if let Some(path) = astar(&grid, start, end) {
        // ...do whatever you want with the path!
    }
}

示例

如果您已克隆了 seastar 仓库,可以使用以下命令运行示例:cargo run --example<example_name>

示例 文件 描述
random_30 random_30.rs 生成一个30x30的地图,包含随机的墙壁和一个随机的起点和终点。
random_100 random_100.rs 生成一个100x100的地图,包含随机的墙壁和一个随机的起点和终点。

基准测试

您可以使用以下命令运行基准测试:cargo bench

注意:关于基准测试的一句话:由于基准测试中的地图是随机生成的,因此结果会因运行而异。没有有效路径的地图往往是异常值,可能会严重扭曲结果,尤其是在较大的网格上。

许可证

Seastar 可根据您的选择双许可

依赖

~175KB