图自动布局算法

为了简化问题,我有一个图表,其中包含2D平面上的节点和边。 我想要做的是单击一个按钮,它会自动布局图形看起来干净。我的意思是边缘的最小交叉,节点之间的漂亮空间,甚至可能代表图形比例(加权边缘)。 我知道这是一个看起来很干净的图表是完全主观的,但有没有人知道一个算法开始,而不是重新发明轮子? 谢谢。     
已邀请:
我建议你看看graphviz。
dot
程序可以采用图形规范,并为您“干净地”生成网络图像。如果您对理论背景感兴趣,该页面上的“理论”链接会为您提供一些可能相关的链接。     
你会发现http://graphdrawing.org/和布朗大学教授Roberto Tamassia的这篇教程非常有帮助。 我喜欢很多Force-Directed Techniques(教程中的第66-72页),比如Spring Embedder。 你假设任何两个相邻节点之间有弹簧或其他力,让自然(模拟)完成工作:)     
还有JGraph,如果你想要Java中的布局(我在项目上工作)。     
我会说作为Noufal Ibrahim,但你也可以更精确地看一下graphviz项目的C API。它包含一个用于构建图形的lib(libgraph.pdf),包含所有节点和边缘,以及一个用于布局图形的lib(libgvc.pdf)(只计算每个节点的位置),因此您可以在自己的UI中显示它例如。     
最流行的布局实际外观的良好视觉指南:点击链接     

要回复问题请先登录注册