【问题标题】:Algorithm for drawing a graph structure?绘制图结构的算法?
【发布时间】:2011-07-12 19:44:49
【问题描述】:

我有一个有向图 G=(V,E),我想重新绘制它,因为它目前非常混乱。这是一个可视化的流程图,因为 |V|>1000 并且 V 中的每个 v 都有超过 1 个出边,因此很难用肉眼追踪。例如;左下角的节点通过一条边连接到右上角的节点。例如,如果这两个节点彼此相邻放置会更好。边缘太多了,每一个都很难追踪。

我可以访问并且可以更改所有顶点的 (x,y) 坐标。我想以一种更人性化的方式保持 G 的当前结构来重绘 G。我认为最小化相交边的数量可能是开始的事情。

有没有算法可以帮我重绘这张图?

我的问题是,如何为 V 中的每个 v 分配 (x,y) 坐标,以便更好地组织和更容易跟踪和阅读?我如何正式表达这些要求?如果这是 NP,我应该采用启发式方法吗? Here 是一个有组织的图表的例子,this 是一些混乱的东西(虽然比我处理的要小得多)。

任何帮助将不胜感激。谢谢。

编辑:我仍在寻找中肯的答案。我研究过平面直线和正交绘图方法,但我得到的是冗长的研究论文。我正在寻找的是一个实现、伪代码或至少让我开始的东西。

编辑 2: 我不想显示图表。算法的输入应为graph G (composed of V and E),输出应为{(xi, yi) for each vi in V}

【问题讨论】:

  • 不,不是作业。只是试图自动化和简化事情......

标签: java python algorithm optimization graph


【解决方案1】:

你想看看graphviz.org;这是一个已经有很多研究的难题,重新实现轮子不是正确的方法。

可能你必须让 java 写出一个数据文件,像 'dot' 这样的工具可以读取并用于图形布局。

【讨论】:

  • 谢谢汤姆的回答。你能更具体一点,我应该研究graphviz的哪一部分?
  • Graphviz 旨在为您绘制图形。 Tom 建议您让 graphviz 为您绘制它,而不是编写您自己的代码。 dot语言很简单,生成dot文件的代码不用log写。
【解决方案2】:

那个乱七八糟的好像是用样条线画的,试试planar straight line algorithm吧。确实这是一个非常困难的问题,我一直使用 GraphViz 作为我的后端图形绘制工具,您可以使用 -Gsplines=line 选项生成您想要的图形。

【讨论】:

  • 边缘是绘制成直线还是曲线并不重要。我对二维平面上节点的位置更感兴趣,因此更少的边相互交叉,边的长度更小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多