8 回答
现在有一个库:graphlib
Graphlib 是一个 JavaScript 库,它为无向和有向多图提供数据结构以及可以与它们一起使用的算法。
实现:
- 有向图和无向图(A -> B 是否暗示 B -> A)
- 多重图(来自 A -> B 的多个不同的命名边)
- 复合图(节点可以有形成“子图”的子节点)
- Dijkstra 算法(最短路径)
- Floyd-Warshall 算法(支持负权重的最短路径)
- Prim 算法(最小生成树)
- Tarjan 算法(强连通分量)
- 拓扑排序(有向无环图的依赖排序)
- 前序和后序遍历(每个节点上的回调)
- 查找所有循环并测试图是否是非循环的
- 查找所有连接的组件
支持 NPM、Bower 和浏览器,MIT 许可证。
几个月前,我创建了一个在 JavaScript 中实现不同 CS 算法的存储库。也很少有带图的算法。我计划扩展它(生成树,启发式算法可能是彩色图),但从那以后我认为仍然很少有算法可以帮助你。
我 在 javascript中制作了一个图形算法库https://github.com/devenbhooshan/graph.js 。图书馆很干净而且很简单。这是非常容易使用。只需将 graph.js 文件插入您的项目并开始使用它。
在 StackOverflow 的类似问题建议的帮助下,我发现了几个主题相似的问题。
第一个,Javascript有向无环图库?(图形可视化不是必需的),很接近。nrabinowitz建议检查data.js 。我快速浏览了data.js的源码。它确实提供了处理图形的界面,但只是以非常基本的方式。那里没有遍历算法。data.js 的目标似乎也不是一个综合性的图形库。
第二个,用于图形操作的 Javascript 库,与此几乎相同的问题,但还没有真正的答案(在 2013-01-23 17:32)。作者c0dem4gnetic对NetworkX的引用是我非常需要的,但不幸的是仅在 Python 中实现。
我会很高兴自己实现这样一个库。图表太酷了。
还有js-graph-algorithms,看起来很干净并且有几种算法。它的api虽然很基础。
目前维护的折旧替代方案graphlib
还包括 Typescript 支持将是graphology。
与某些扩展(例如graphology-shortest-path
.
我们的Java 库中有算法,我们只是想找到一个空闲槽将它们添加到我们的JavaScript 库中。这对您现在没有帮助,但可能对以后的观众有用。
这是用 JavaScript 实现的 Tarjan 强连接组件算法:https ://www.vacilando.org/article/javascript-implementation-tarjans-cycle-detection-algorithm