Graphology Simple Path
Simple path related functions to be used with graphology
. A “simple path” is a path where a node is not repeated.
Installation
npm install graphology-simple-path
Usage
allSimplePaths
Collects every simple path between a source and a target node in the given graph.
Note that this function also works with cycles.
import {allSimplePaths} from 'graphology-simple-path';
const graph = new Graph();
graph.mergeEdge('1', '2');
graph.mergeEdge('1', '3');
graph.mergeEdge('2', '3');
const paths = allSimplePaths(graph, '1', '3');
>>> [
['1', '3'],
['1', '2', '3']
]
// To get cycles, just pass same source & target
const cycles = allSimplePaths(graph, '1', '1');
// To limit traversal to a certain depth
const limitedPaths = allSimplePaths(graph, '1', '3', {maxDepth: 2});
Arguments
- graph Graph: target graph.
- source string: source node.
- target string: target node.
- options ?object: options:
- maxDepth ?number: max traversal depth (default - no limit).
allSimpleEdgePaths
Collects every simple path, represented by the followed edges, between a source and a target node in the given graph.
Note that this function also works with cycles but does not work with multi graphs yet.
import {allSimpleEdgePaths} from 'graphology-simple-path';
const graph = new Graph();
graph.mergeEdgeWithKey('1->2', '1', '2');
graph.mergeEdgeWithKey('1->3', '1', '3');
graph.mergeEdgeWithKey('2->3', '2', '3');
const paths = allSimpleEdgePaths(graph, '1', '3');
>>> [
['1->3'],
['1->2', '2->3']
]
// To get cycles, just pass same source & target
const cycles = allSimpleEdgePaths(graph, '1', '1');
// To limit traversal to a certain depth
const limitedPaths = allSimpleEdgePaths(graph, '1', '3', {maxDepth: 2});
Arguments
- graph Graph: target graph.
- source string: source node.
- target string: target node.
- options ?object: options:
- maxDepth ?number: max traversal depth (default - no limit).
allSimpleEdgeGroupPaths
Collects every simple path, represented by groups of equivalent followed edges, between a source and a target node in the given multi graph.
Note that this function also works with cycles and that, even if it can work with a simple graph, it has not be designed to be useful in this case.
import {allSimpleEdgeGroupPaths} from 'graphology-simple-path';
const graph = new Graph();
graph.mergeEdgeWithKey('1->2a', '1', '2');
graph.mergeEdgeWithKey('1->2b', '1', '2');
graph.mergeEdgeWithKey('1->3a', '1', '3');
graph.mergeEdgeWithKey('2->3a', '2', '3');
const paths = allSimpleEdgeGroupPaths(graph, '1', '3');
>>> [
[['1->3a']],
[['1->2a', '1->2b'], ['2->3a']]
]
// To get cycles, just pass same source & target
const cycles = allSimpleEdgeGroupPaths(graph, '1', '1');
// To limit traversal to a certain depth
const limitedPaths = allSimpleEdgeGroupPaths(graph, '1', '3', {maxDepth: 2});
Arguments
- graph Graph: target graph.
- source string: source node.
- target string: target node.
- options ?object: options:
- maxDepth ?number: max traversal depth (default - no limit).