Алгоритм автоматической компоновки графа
чтобы упростить задачу, я граф, содержащий узлы и ребра, которые находятся на 2D плоскости.
то, что я хочу иметь возможность сделать, это нажать кнопку, и она сделает автоматически макет графика выглядеть чистым. Под этим я подразумеваю минимальное пересечение ребер, хорошее пространство между узлами, возможно, даже представляют собой масштаб графика (взвешенные ребра).
Я знаю, что это полностью субъективно того, что является чистым графом, но кто-нибудь знает алгоритм для начала, вместо того, чтобы изобретать колесо?
спасибо.
5 ответов
Я бы предложил вам взглянуть наgraphviz. The dot
программа может взять спецификацию графика и создать изображение сети для вас несколько "чисто". Ссылка "теория" на этой странице дает вам некоторые ссылки, которые могут быть актуальными, если вас интересует теоретический фон.
вы найдете http://graphdrawing.org/ и в этом уроке, by От Roberto Tamassia, профессор Университета Брауна, очень полезно.
Мне нравится много силовых методов (стр. 66-72 в учебнике), таких как Весна Embedder.
вы предполагаете, что между любыми двумя соседними узлами есть пружина или другая сила, и пусть природа (моделирование) делает работу :)
Я бы сказал, Как Нуфаль Ибрагим, но вы также можете посмотреть более точно на C API graphviz. Он включает в себя lib для построения графика (libgraph.формат PDF) со всеми узлами и ребрами и lib для компоновки графика (libgvc.формат PDF) (просто вычислите каждую позицию узлов), чтобы затем вы могли отобразить ее в своем собственном пользовательском интерфейсе, например.
хорошее визуальное руководство, как на самом деле выглядят самые популярные макеты: следуйте ссылке