我很难准确地定义这个问题,这也是我无法解决它的部分原因。基本上,我想为提供一种拓扑排序的节点分配数字,但是如果图中存在我想要允许的循环,它应该为节点分配值,这些节点本质上是计算与最近的非排序的距离。循环节点。
例如,如果存在另一个非循环依赖关系,分配给节点的编号可能看起来更像这样。
目前,分配的数字仅基于总依赖关系,这会创建不太理想的布局。
我有一种感觉,我可能需要使用一些涉及强连接组件的算法,但我不确定如何应用它来获得所需的结果。任何澄清此问题的帮助将不胜感激!
最佳答案
Tarjan's algorithm为了生成强连接组件,已经对组件进行了拓扑排序(相反)。另一方面,Bellman-Ford为您提供到图中给定节点的最短路径。
所以我采用的方法是:
- 实现 Tarjan 算法对所有 SCC 进行排序
- 将 Bellman-Ford 应用于超过一个节点的任何 SCC,其中计算到任意选择的“入口节点”的最短路径,即具有在环外引导的前驱节点的节点。
还不错!
关于d3.js - 如何对带环的有向图进行拓扑排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74336557/