Попробуй это. Невидимые края должны обеспечивать порядок в пределах ранга. Двойной 5 - 6 край должен обеспечить ar c, в противном случае край был бы прямым. Я попробовал это на viz- js .com. Чередование верхних и нижних дуг сильно зависит от порядка ребер. Поскольку он очень чувствительный, недокументированный и, вероятно, склонен к незначительному изменению версии, я не рекомендую его в качестве производственного решения, так как механизм DOT не подходит для таких задач. Для одноразовой документации достаточно и соответствует вашим требованиям.
graph G {
splines=splines;
node [shape=circle];
edge [constraint=false];
rankdir=LR;
1 -- 10;
3 -- 8;
2 -- 9;
1 -- 2 [style=invis, constraint=true];
2 -- 3 [style=invis, constraint=true];
3 -- 4 [style=invis, constraint=true];
4 -- 5 [style=invis, constraint=true];
5 -- 6 [style=invis];
4 -- 7;
5 -- 6 [constraint=true];
6 -- 7 [style=invis, constraint=true];
7 -- 8 [style=invis, constraint=true];
8 -- 9 [style=invis, constraint=true];
9 -- 10 [style=invis, constraint=true];
}