Круговой список в Графвизе?или как согнуть край - PullRequest
0 голосов
/ 23 мая 2018

Я пытался сделать то, что мне показалось простой в Graphviz, что-то вроде этого:

enter image description here (взято из https://tex.stackexchange.com/questions/394432/how-to-draw-circular-linked-list)

И я пытаюсь сделать что-то подобное с Graphviz, вот как это выглядит прямо сейчас:

enter image description here

Я прочитал документацию и попробовал уже с Neato иCirco Diagram и безуспешно .... Как я могу добиться изгиба края так, как мне нужно? Теперь я могу попробовать использовать координату, например p3:e -> p1:w, но это удалит начальную точку из середины записи.

Это мой код:

digraph {
  node[shape=record];
  graph[pencolor=transparent];
  rankdir=LR;
  p1[label="{<data> 12|<next>}"];
  p2[label="{<data> 99|<next>}"];
  p3[label="{<data> 37|<next>}"];

  edge[tailclip=false,arrowtail=dot,dir=both];

  p1:next:c -> p2:data;
  p2:next:c -> p3:data;
  p3:next:c -> p1:data[constraint=false];
}

1 Ответ

0 голосов
/ 29 мая 2018

вам нужны некоторые вспомогательные узлы (p0 и p4)

digraph {
  node[shape=record];
  graph[pencolor=transparent];
  rankdir=LR;
  p1[label="{<data> 12|<next>}"];
  p2[label="{<data> 99|<next>}"];
  p3[label="{<data> 37|<next>}"];

  edge[tailclip=false,arrowtail=dot,dir=both];

  {node[shape=point height=0] p0 p4} // make p0 and p4 to small to see
  p0:n -> p1[arrowtail=none]
  p0:s -> p4:s[dir=none] // add edge with no arrow to make it look like one long edge, also make p0 the tail so we don't have a recursition that may course dot to rearange the nodes
  p1:next:c -> p2:data;
  p2:next:c -> p3:data;
  //p3:next:c -> p1:data[constraint=false];
  p3:next:c -> p4:n[arrowhead=none]
}

enter image description here

Возможно, вы можете сделать крест в хвосте, используя HTML-таблицупометить и добавить изображение в одну из ячеек

...