Алгоритм автоматической компоновки графа

чтобы упростить задачу, я граф, содержащий узлы и ребра, которые находятся на 2D плоскости.

то, что я хочу иметь возможность сделать, это нажать кнопку, и она сделает автоматически макет графика выглядеть чистым. Под этим я подразумеваю минимальное пересечение ребер, хорошее пространство между узлами, возможно, даже представляют собой масштаб графика (взвешенные ребра).

Я знаю, что это полностью субъективно того, что является чистым графом, но кто-нибудь знает алгоритм для начала, вместо того, чтобы изобретать колесо?

спасибо.

5 ответов


Я бы предложил вам взглянуть наgraphviz. The dot программа может взять спецификацию графика и создать изображение сети для вас несколько "чисто". Ссылка "теория" на этой странице дает вам некоторые ссылки, которые могут быть актуальными, если вас интересует теоретический фон.


вы найдете http://graphdrawing.org/ и в этом уроке, by От Roberto Tamassia, профессор Университета Брауна, очень полезно.

Мне нравится много силовых методов (стр. 66-72 в учебнике), таких как Весна Embedder.

вы предполагаете, что между любыми двумя соседними узлами есть пружина или другая сила, и пусть природа (моделирование) делает работу :)


и jgraph выступает Если вы хотите макеты в Java (я работаю над проектом).


Я бы сказал, Как Нуфаль Ибрагим, но вы также можете посмотреть более точно на C API graphviz. Он включает в себя lib для построения графика (libgraph.формат PDF) со всеми узлами и ребрами и lib для компоновки графика (libgvc.формат PDF) (просто вычислите каждую позицию узлов), чтобы затем вы могли отобразить ее в своем собственном пользовательском интерфейсе, например.


хорошее визуальное руководство, как на самом деле выглядят самые популярные макеты: следуйте ссылке