图分层布局算法
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 之前运行修剪算法以忽略从网关返回到前一个活动的流以进行布局(仅)。以上是关于图分层布局算法的主要内容,如果未能解决你的问题,请参考以下文章
分层图+最短路算法 BZOJ 2763: [JLOI2011]飞行路线