d3.js - 如何对带环的有向图进行拓扑排序

标签 d3.js graph graph-theory topological-sort

我很难准确地定义这个问题,这也是我无法解决它的部分原因。基本上,我想为提供一种拓扑排序的节点分配数字,但是如果图中存在我想要允许的循环,它应该为节点分配值,这些节点本质上是计算与最近的非排序的距离。循环节点。 enter image description here

例如,如果存在另一个非循环依赖关系,分配给节点的编号可能看起来更像这样。

enter image description here

目前,分配的数字仅基于总依赖关系,这会创建不太理想的布局。

enter image description here

我有一种感觉,我可能需要使用一些涉及强连接组件的算法,但我不确定如何应用它来获得所需的结果。任何澄清此问题的帮助将不胜感激!

最佳答案

Tarjan's algorithm为了生成强连接组件,已经对组件进行了拓扑排序(相反)。另一方面,Bellman-Ford为您提供到图中给定节点的最短路径。

所以我采用的方法是:

  1. 实现 Tarjan 算法对所有 SCC 进行排序
  2. 将 Bellman-Ford 应用于超过一个节点的任何 SCC,其中计算到任意选择的“入口节点”的最短路径,即具有在环外引导的前驱节点的节点。

它呈现这样的图表: enter image description here

还不错!

关于d3.js - 如何对带环的有向图进行拓扑排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74336557/

相关文章:

python - 可视化交锋记录的最佳方式是什么?

javascript - dimple js直线y轴在条形图上

python - 如何分别传播字符串列表?

R&Inkscape : text labels in SVG graphics exported from R did not recognized as a text in Inkscape

algorithm - 寻求反转(反转?镜像?从里到外)DAG 的算法

c++ - 满足以下条件的高效图算法?

algorithm - 从网络中选取最大数量的节点,以便没有一个节点以 1 度相连

javascript - d3.js:如何处理附加在同一位置的 svg 元素,一个在另一个之上?

javascript - c3.generate 不抛出错误

d3.js - 如何使用D3 d3js根据元素属性分层追加 "composed"元素?