#graph #graph-node #traversal #edge #primitive #idea #api

gamma

为Rust提供的图原语和遍历

11个版本 (破坏性)

0.9.0 2021年1月25日
0.8.1 2020年10月2日
0.7.0 2020年9月25日
0.6.1 2020年7月8日
0.1.1 2020年3月13日

#975 in 算法

每月28次下载
用于 chemcore

MIT 许可协议

93KB
3K SLoC

Gamma

Rust的图库。

Gamma提供了用于处理的原语和遍历。它基于在一个最小的图API中提出的想法。

使用方法

将此内容添加到您的Cargo.toml

[dependencies]
gamma = 0.9.0

示例

ArrayGraph是一个参考的Graph实现。节点、邻居和边迭代顺序是稳定的,并由try_from方法设置。

use std::convert::TryFrom;
use gamma::graph::{ Graph, DefaultGraph, Error };

fn main() -> Result<(), Error> {
    let p3 = DefaultGraph::try_from(vec![
        vec![ 1 ],
        vec![ 0, 2 ],
        vec![ 1 ]
    ])?;

    assert_eq!(p3.is_empty(), false);
    assert_eq!(p3.order(), 3);
    assert_eq!(p3.size(), 2);
    assert_eq!(p3.ids().collect::<Vec<_>>(), [ 0, 1, 2 ]);
    assert_eq!(p3.neighbors(1)?.collect::<Vec<_>>(), [ 0, 2 ]);
    assert_eq!(p3.has_id(4), false);
    assert_eq!(p3.degree(0)?, 1);
    assert_eq!(p3.edges().collect::<Vec<_>>(), [
        (0, 1),
        (1, 2)
    ]);
    assert_eq!(p3.has_edge(1, 2)?, true);

    let result = DefaultGraph::try_from(vec![
        vec![ 1 ]
    ]);

    assert_eq!(result, Err(Error::UnknownId(1)));

    Ok(())
}

特性包括

版本

Gamma尚不稳定。修补版本不会引入破坏性更改,但次要/主要版本可能会。

许可协议

Gamma在MIT许可协议下分发。有关详细信息,请参阅LICENSE-MITCOPYRIGHT

无运行时依赖