我有一个要重绘的有向图G =(V,E),因为它目前非常混乱.这是正在可视化的流程图,并且由于| V |> 1000,并且V中的每个v具有多于1个输出边缘,因此很难用眼睛追踪.例如;左下角的节点通过一条边连接到右上角的节点.例如,如果将这两个节点彼此相邻放置,那就更好了.边太多了,很难找到它们的每一个.
我可以访问并可以更改所有顶点的(x,y)坐标.我想通过保持G的当前结构来重绘G,以更加人性化的方式.我认为,最小化相交边缘的数量可能是从一开始.
有没有可以帮助我重绘该图的算法?
我的问题是,如何为V中的每个v分配(x,y)坐标,以使其组织得更好,更容易追踪和读取?如何正式表达这些要求?如果这是NP,是否应该采用启发式方法? Here是一个有点条理的图的示例,而this则是一团糟(尽管比我要处理的要小得多).
任何帮助将不胜感激.谢谢.
编辑:我仍在寻找一个关键的答案.我已经研究了平面直线和正交绘制方法,但是我得到的是冗长的研究论文.我要寻找的是实现,伪代码或至少可以帮助我入门的东西.
编辑2:我不试图显示图形.算法的输入应为图形G(由V和E组成),输出应为{(xi,yi)V中的每个vi}
解决方法:
您想看一下graphviz.org.这是一个棘手的问题,已经有大量的研究,重新实现方向盘不是正确的方法.
可能您需要让Java编写出一个数据文件,“ dot”之类的工具可以读取该数据文件并将其用于图形布局.