我做了一个qt节点来绘制图表。我想安排图表。但我找不到方法:(我认为图表的流程解决了我的问题。所以我想得到找到流程的解决方案。有了上图,我想得到一个这样的列表
[A, B]
[A, C, D]
[A, C, E]
每个节点都有一个父链接和子链接,所以我可以找到它们。使用递归函数,我能找到答案吗?我必须使用什么算法?
我做了一个qt节点来绘制图表。我想安排图表。但我找不到方法:(我认为图表的流程解决了我的问题。所以我想得到找到流程的解决方案。有了上图,我想得到一个这样的列表
[A, B]
[A, C, D]
[A, C, E]
每个节点都有一个父链接和子链接,所以我可以找到它们。使用递归函数,我能找到答案吗?我必须使用什么算法?
您在这里拥有的是图表(来自图论,而不是条形图等)。在这种情况下,它是树——但如果从 B 到 D 有一个链接,那么它就不再是树了。
所以为了“找流”,你应该做一个“拓扑排序”;如果它是一棵树,“BFS”运行也可以。
这样,您将获得“层”,即图表中从左到右的顺序,这可以映射到 x 坐标。如果图是树,找到好的 y 坐标更容易,如果是一般图,则更难。在前一种情况下,您可以通过排列每个节点的子树来递归地(“自下而上”)确定位置 - 即它右侧的所有元素。
如果您的结构是图表,您可以查看 Sugiyama 的算法,但这涉及更多。在这种情况下,我建议使用图形库。
后一种算法在这里实现以玩:
转到交互式图形源演示
然后将顶部的组合框切换为“2 Dynamic Bindings”并修改右侧的文本框如下:
节点来源:
['A','B','C','D','E']
边缘来源:
['AB', 'AC', 'CD', 'CE']