#图论 # # #图算法 #可扩展 #顶点 #数据

graphene

一个通用的、可扩展的 Rust 图论数据类型和算法库

5 个版本

使用旧的 Rust 2015

0.1.5 2018 年 4 月 15 日
0.1.4 2018 年 4 月 7 日
0.1.3 2017 年 6 月 14 日
0.1.0 2017 年 5 月 17 日

#1508算法

每月 22 次下载

MIT 许可证

68KB
1K SLoC

graphene

Build Status

一个通用的、可扩展的 图论 数据类型和算法库,用于 Rust。

该项目仍处于早期设计和开发阶段,仍在不断变化。目前项目重点不是良好的公共 API,文档可能较少,也可能存在许多错误。

示例

#[macro_use]
extern crate graphene;
use graphene::core::*;
use graphene::core::constraint::*;
use graphene::common::AdjListGraph;
//!
custom_graph!{
	// Name of the resulting graph type
	struct MyGraph<V,W>
	// The BaseGraph implementation to base the new graph on.
	as AdjListGraph<V,W>
	// The graph wrappers that will constrain the BaseGraph implementation so that
	// it upholds the constraint traits.
	use UniqueGraph,UndirectedGraph
	// The constraint traits the new graph implements
	impl Unique,Undirected
	// The generic bounds
	where V: Vertex, W: Weight
}

fn main(){
    let mut g = MyGraph::graph(vec![1,2,3], vec![(1,2,1),(2,3,2),(3,1,3)]).unwrap();
	assert_eq!(g.edges_between(1,2).len(), 2);

	// Cannot add an edge that is already there because the graph
	// is declared as Unique, meaning no two edges may be incident
	// on the same vertices and have the weight.
	assert!(g.add_edge(BaseEdge::new(1,2,1)).is_err());
	assert_eq!(g.edges_between(1,2).len(), 2);
}

许可证

许可协议为 MIT 许可证。

任何带有自己许可证头部的文件也按照上述许可证许可,任选其一。如果头部指定了与上述不同的许可证,则视为附加选择,可以选择上述许可证或头部许可证。

对仓库的任何有意贡献都按照上述许可证许可,并且不排除特定贡献的许可证。

无运行时依赖