2.0.1 • Published 5 years ago
@vila91/graph v2.0.1
Directed and Undirected graph implementation based on the following node structure. Nodes can be added using at construction or by using the .set(x, y, cost) method with cost defaulting to 1.
let nodes = {x: {y: 2}, y: {z: 3}},
graph = Directed(nodes).set(z, x)
console.log(graph)
// Directed {x: {y: 2}, y: {z: 3}, z: {x: 1}}
The .routes(x, y, limit) method returns the shortest routes from x to y, same-cost routes are sorted by number of nodes ascending, limit defaults to Infinity, for performance purposes it is recommended to set it to exactly the number needed.
graph.set("B", "C").set("C", "D").set("B", "D").set("A", "D", 3)
console.log(graph.routes("A", "D"))
/* [
{cost: 2, nodes: ["A", "B", "D"]},
{cost: 3, nodes: ["A", "D"]},
{cost: 3, nodes: ["A", "B", "C", "D"]}
] */
console.log(graph.routes("A", "D", 1))
// [{cost: 2, nodes: ["A", "B", "D"]}]
The .route(x, ...y) method returns the cheapest route going from x through all ...y nodes. It is based on calls to .routes with limit = 1.
let route = graph.route("A", "B", "D")
console.log(route)
// {cost: 2, nodes: ["A", "B", "D"]}