Расположите узлы так, чтобы края не пересекались - PullRequest
0 голосов
/ 18 октября 2018

Я хотел бы создать диаграмму, представляющую конечный автомат, чтобы ребра между узлами не пересекались или, по крайней мере, имели минимальное количество пересечений.Вот пример использования

dot -Tpng diagram.dot:

enter image description here

Эта диаграмма имеет 7 пересечений.Я вручную расположил эту диаграмму так, чтобы она имела только 3 пересечения, но я хотел бы иметь алгоритм, чтобы сделать это автоматически и найти оптимальное решение.Пожалуйста, укажите мне алгоритм / исходный код / ​​инструмент, который делает это.

Вот исходный код figure.dot для этой диаграммы:

digraph {
    START
    A
    B
    C
    D
    E
    F
    G
    H
    I
    J
    L
    M
    K

    START -> A
    A -> B
    A -> L
    B -> C
    C -> G
    C -> D
    D -> J
    E -> F
    F -> A
    G -> B
    G -> H
    G -> I
    G -> M
    H -> L
    I -> L
    J -> L
    J -> H
    J -> I
    J -> K
    J -> G
    J -> E
    J -> M
    K -> L
    L -> B
    L -> H
    L -> I
    L -> J
    L -> M
    M -> L
}
...