### 11 releases (breaking)

0.9.0 | Jan 25, 2021 |
---|---|

0.8.1 | Oct 2, 2020 |

0.7.0 | Sep 25, 2020 |

0.6.1 | Jul 8, 2020 |

0.1.1 | Mar 13, 2020 |

#**914** in Algorithms

Used in chemcore

**MIT**license

93KB

3K
SLoC

# Gamma

A graph library for Rust.

Gamma provides primitives and traversals for working with graphs. It is based on ideas presented in *A Minimal Graph API*.

## Usage

Add this to your

:`Cargo.toml`

`[``dependencies``]`
`gamma ``=` `0.9`.`0`

## Examples

is a reference `ArrayGraph`

implementation. Node, neighbor, and
edge iteration order are stable and set by the `Graph`

method.`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``(``(``)``)`
`}`

Features include:

- depth-first and breadth-first traversal
- connected components
- maximum matching using Edmonds' Blossom algorithm

## Versions

Gamma is not yet stable. Patch versions never introduce breaking changes, but minor/major versions probably will.

## License

Gamma is distributed under the terms of the MIT License. See LICENSE-MIT and COPYRIGHT for details.