绘制图形结构的算法?

时间:2011-07-10 14:12:22

标签: java python algorithm optimization graph

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

我可以访问并可以更改所有顶点的(x,y)坐标。我想通过维护它的当前结构来重绘G,以一种更加人性化的方式。我认为最小化交叉边缘的数量可能是一件好事。

是否有可以帮助我重绘此图表的算法?

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

似乎使用样条曲线绘制了一个混乱的版本,请尝试使用planar straight line algorithm。确实这是一个非常困难的问题,我总是使用GraphViz作为我的后端图形绘制工具,您可以使用-Gsplines = line选项生成所需的图形。