graph-by-ivan-tulaev
Version:
Graph library for traversing and processing any directional graphs.
37 lines (31 loc) • 1.73 kB
Markdown
# graph-by-ivan-tulaev
Graph library for traversing and processing any directional graphs.
## Description
- Working with **directional graphs**.
- Has utility functions for **elements CRUD** operations (nodes & edges)
- Customise graph traversing with **genericTraversing**
- Get independent sub-graphs with **getSeparatedGraphs**
- Check if there is a path between two nodes in different directions with **isNodeTraced**
- Has some popular functions for customisation traversing in [traversingFunctions](lib/traversingFunctions)
## Traverse customisation
Use **genericTraversing** in [Graph class](lib/Graph.ts) for create your own graph traversing algorithm.
### callbacks
- **getStartElement: (visited: Set<N>, initialGraph: Graph<N>) => N | undefined**
- get node to start or repeat iteration after executionSequence is empty
- stop iteration when undefined
- **getNextFromExecutionSequence: (executionSequence: Array<N>) => N | undefined**
- get next elements from executionSequence
- in some cases it is best way to use .pop()... in some cases .shift()
- **getNextNodes: (node: N, graph: Graph<N>, visited: Set<N>) => Array<N> | undefined**
- for get next nodes
- these can be outgoing, incoming or other specific nodes
- stop iteration when undefined
- **addNextNodesToExecutionSequence: (nodes: Array<N>, executionSequence: Array<N>) => void**
- add nodes to executionSequence
- in some cases it is best way to use .push()... in some cases .unshift()
- **executeCurrent?: (node: N) => void**
- for current node processing
### examples
For callbacks examples you can check **getSeparatedGraphs()** and **isNodeTraced()** in [Graph class](lib/Graph.ts)
## License
[MIT](./LICENSE)