У меня есть график, который состоит из узлов. Каждый узел может иметь несколько родителей и / или детей. Я хочу отобразить этот график и соединения между узлами.
Но я не знаю, как перераспределить узлы, чтобы максимизировать удобочитаемость. В настоящее время я сталкиваюсь со следующими проблемами:
- Соединения узлов слишком сильно пересекаются друг с другом, даже если это излишне и может быть исключено
- Визуальные соединения между узлами слишком длинные
- Некоторые соединения имеют одинаковый угол, поэтому они перекрываются и становятся одной линией
- Соединения между столбцом
i
и столбцом i-2
(и далее) иногда go сквозными элементами в столбце i-1
Также я могу смещать узлы только по вертикали, а не по горизонтали, потому что количество столбцов ограничено.
Чтобы упростить для себя, я попытался поместить узлы в сетчатый шаблон. И мне удалось сгруппировать их по столбцам. Но затем мне нужно как-то перебирать столбцы и сравнивать их с другими столбцами, чтобы переупорядочить вещи. И я не знаю с чего начать.
UPD: Я могу ошибаться, но я чувствую, что моя проблема с выравниванием графа как-то связана с типичной проблемой графа кратчайшего пути. За исключением того, что в моем случае есть несколько путей, которые должны быть рассчитаны одновременно, и некоторые узлы могут быть пропущены только один раз.
На изображении ниже вы можете увидеть почти идеальное перераспределение, которое я сделал, просто набросав вещи на бумаге (направление слева направо показывает связи между родителями и детьми).