图分层布局算法

Posted

技术标签:

【中文标题】图分层布局算法【英文标题】:Graph Hierarchical Layout Algorithm 【发布时间】:2012-12-13 13:43:45 【问题描述】:

有许多工具和 SDK 可以布置图表。 ogdf、GraphViz、mxGraph、yEd...

一种有用的布局是“分层布局”。但是没有纯粹的算法或伪代码来描述它。甚至,这种类型的布局也没有一个明确的定义。有人知道算法吗?

【问题讨论】:

【参考方案1】:

(来源:yworks.com)

简单的分层布局算法是 ASAP 调度算法的可视化(查看本讲座 [link]),所以我认为最好阅读它。

顺便说一句,您的图片并不完全正确 - 建议的可视化只是其中一种可能。

想象一下,你有节点列表并且你知道它们之间的依赖关系。

节点列表

node4
node2
node5
node1
node3
node6

依赖列表

node1 -> node2
node2 -> node4
node3 -> node5
node1 -> node3
node3 -> node6
作为您的第一步,您应该找到没有依赖关系的节点 - 这 将是您的第 1 层节点。画出来。 然后找到依赖于第 1 层节点的所有节点 - 这将是您的第 2 层节点。

对于第 2 层等也是如此。 最后,你会得到:

         node1
        /     \
      node2  node3
       /     /   \
    node4 node5 node6

这仅适用于非循环有向图。对于无向的,你应该稍微修改一下算法(以随机节点为根),但我认为主要思想是可以理解的。

【讨论】:

我首先使用修改后的深度优先搜索 (DFS) 检查循环,例如geeksforgeeks.org/detect-cycle-in-a-graph 由于 BPMN 网络在涉及网关时可能有几个周期,因此您可以在 DFS 之前运行修剪算法以忽略从网关返回到前一个活动的流以进行布局(仅)。

以上是关于图分层布局算法的主要内容,如果未能解决你的问题,请参考以下文章

“堆叠”与“悬挂”分层图形绘制算法的标准名称?

数据可视化信息图之使用Ai,Excel制作分层面积图

分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线

NEFU 1132 分层图最短路

CF990G GCD Counting(树上莫比乌斯反演,分层图,并查集)

[黑科技]分层图