#dag #directed-acyclic-graph #graph #lib #store

xdag

一个简单的Rust DAG(有向无环图)库

5个版本

0.1.4 2022年9月15日
0.1.3 2022年9月14日
0.1.2 2022年9月13日
0.1.1 2022年9月1日
0.1.0 2022年9月1日

2192数据结构

MIT 许可证

28KB
590

XDag

一个简单的DAG(有向无环图)库

注意

此库仅提供存储并检查DAG的数据结构。它不包含任何关于DAG的算法。

详细信息

XDAG通过HashMap存储DAG。它无法保证子节点和边的顺序

文档

docs.rs

示例

// Create a new DAG
let mut dag = Dag::new();
// insert 3 nodes with data '()'
dag.insert_node(2, ());
dag.insert_node(4, ());
dag.insert_node(3, ());
// insert 2 edges with data '()'
dag.insert_edge(2, 3, ()).unwrap();
dag.insert_edge(2, 4, ()).unwrap();
// Get all roots and leaves in DAG
let roots = dag.roots().map(|(id, _)| id).collect::<Vec<_>>();
let leaves = dag.leaves().map(|(id, _)| id).collect::<Vec<_>>();

assert_eq!(&roots, &[2]);
for id in [3, 4].iter() {
    assert!(leaves.contains(id))
}

lib.rs:

XDag

一个简单的DAG(有向无环图)库

注意

此库仅提供存储并检查DAG的数据结构。它不包含任何关于DAG的算法

详细信息

XDAG通过BTreeMap存储DAG。因为它可以保证边和节点的顺序。

一些示例

// Create a new DAG
let mut dag = Dag::new();
// insert 3 nodes with data '()'
dag.insert_node(2, ());
dag.insert_node(4, ());
dag.insert_node(3, ());
// insert 2 edges with data '()'
dag.insert_edge(2, 3, ()).unwrap();
dag.insert_edge(2, 4, ()).unwrap();
// Get all roots and leaves in DAG
let roots = dag.roots().map(|(id, _)| id).collect::<Vec<_>>();
let leaves = dag.leaves().map(|(id, _)| id).collect::<Vec<_>>();
assert_eq!(&roots, &[2]);
for id in [3, 4].iter() {
    assert!(leaves.contains(id))
}

无运行时依赖项