在 TikZ 中创建不相交集数据结构图

在 TikZ 中创建不相交集数据结构图

我目前正在学习 CLRS 算法教科书,我遇到了一个图,它将不相交集表示为树的集合,其中每棵树代表一个集合。我希望使用 TikZ 重新创建类似于附图中的图表,以便包含在我的 LaTeX 笔记中。

该图用字母标签和数字下标描绘了各种节点,箭头指示了不相交集树中的父节点。

我对 TikZ 还不太熟悉,正在努力学习如何最好地表示这些结构。有人可以提供一个可以生成类似图表的 TikZ 代码的简单示例或模板吗?具体来说,任何关于如何管理节点和有向边的定位的提示都将非常有价值。

附件是我所指的图像。

不相交集数据结构

我感谢您提供的任何指导!

答案1

这是为您提供的一些启动器,但下次请提供代码。

(A)一般来说我建议执行如下过程:

  1. 放置节点
  2. 介绍风格
  3. 建立联系
  4. 进行改进

(二)有多种放置节点的方法,例如:

  • 绝对(以下)
  • 使用极坐标(如下)
  • tikz图书馆positioning
  • tikz matrix(节点数)
  • 等等,即做出你的选择

对于初学者来说,树或森林可能不是最好的方法。

(C)我有意省略了一个节点样式来演示效果和过程。

(四)连接相当简单,您可以不放置尖端、在一侧放置尖端或两侧都放置尖端。请自行选择。

有几种方法可以创建自循环。我结合了以下方法:

  • 使用中间点(相对坐标)
  • 替换--to[out=,in=]实现更好的控制。

(英)现在,您已经拥有了一切,可以自己完成整个图表了。请记住,使用手册搜索这个网站可以帮你省去很多麻烦。

结果

\documentclass[10pt,border=3mm,tikz]{standalone}
% ~~~ 4. have nicer arrow tips ~~~~~~~~
\usetikzlibrary{arrows.meta}

\begin{document}
 \begin{tikzpicture}[
    % ~~~ 2. introduce and use styles ~~~~~~
    circ/.style={draw,circle},
    % ~~~ 4. have nicer arrow tips ~~~~~~~~
    >={Stealth},
    ]
    % ~~~ 1. place nodes as needed ~~~~~
    \node[circ] (h1) at (0,0)   {h,1};  
    \node[circ] (e0) at (-40:2) {e,0};  
    \node       (g2) at (210:2) {g,2};  % for demo purposes
    
    % ~~~ placement more or less ok? ~~~
    
    % ~~~ 3. draw some connections ~~~~
    \draw[->] (e0) -- (h1);
    \draw[<-] (g2) -- (h1); % if you prefer opposite direction
    \draw[->] (g2) to[out=150,in=90] +(-1,0) to[out=270,in=220] (g2);
    
 \end{tikzpicture}
\end{document}

相关内容