我在 CLRS 第三版《算法导论》(第 596 页)中看到过下面的图表,我想用 latex 代码创建它,而不是复制它(主要目的是可以选择编辑它并将其用于其他图表)。我知道如何创建节点、节点标签和节点内的数字。
我不知道如何在左侧添加标签(a)并在右侧添加项目(Q 和正方形包含 s 并且其下方为 0 [我知道如何创建带有标签和字符的正方形节点])。
这就是我想要实现的目标:
这是我用来创建图表的代码(我使用 lyx,并且前言配置正确):
\begin{tikzpicture}
[node distance=2.5cm,main node/.style={minimum size=.7cm,circle,fill=white!20,draw},
scale=0.6, every node/.style={scale=0.6}]
\node[main node] [label={270:$v$}] (A) {$\infty$};
\node[main node] (B) [above of=A,label=$r$] {$\infty$};
\node[minimum size=.7cm,circle,fill=lightgray,draw] (C) [right of=B,label=$s$]{$0$};
\node[main node] (D) [below of=C,label={270:$w$}] {$\infty$};
\node[main node] (E) [right of=D,label={270:$x$}] {$\infty$};
\node[main node] (F) [right of=E,label={270:$y$}] {$\infty$};
\node[main node] (G) [above of=F,label=$u$] {$\infty$};
\node[main node] (H) [left of=G,label=$t$] {$\infty$};
\draw (A) -> (B) -> (C) -> (D) -> (E) -> (F) -> (G) -> (H);
\draw (D) -> (H) -> (E) -> (G);
\end{tikzpicture}
我知道我的代码可能很丑陋并且可以变得更好,我仍然是一个学习者,任何建议都会受到赞赏。
提前致谢!
答案1
您可以使用多种方法来将节点定位在这些位置。下面我将它们相对于节点放置current bounding box
,并展示了另一种方法(注释),使用您已经定义的两个最外层节点。
请注意,要在两个坐标之间画一条线,应该使用--
,->
例如 (a) -- (b)
。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
[node distance=2.5cm,main node/.style={minimum size=.7cm,circle,fill=white!20,draw},
scale=0.6, every node/.style={scale=0.6}]
\node[main node] [label={270:$v$}] (A) {$\infty$};
\node[main node] (B) [above of=A,label=$r$] {$\infty$};
\node[minimum size=.7cm,circle,fill=lightgray,draw] (C) [right of=B,label=$s$]{$0$};
\node[main node] (D) [below of=C,label={270:$w$}] {$\infty$};
\node[main node] (E) [right of=D,label={270:$x$}] {$\infty$};
\node[main node] (F) [right of=E,label={270:$y$}] {$\infty$};
\node[main node] (G) [above of=F,label=$u$] {$\infty$};
\node[main node] (H) [left of=G,label=$t$] {$\infty$};
\draw (A) -- (B) -- (C) -- (D) -- (E) -- (F) -- (G) -- (H);
\draw (D) -- (H) -- (E) -- (G);
\node at ([xshift=-0.6cm]current bounding box.west) {(a)};
% alternative method:
% \path (A) -- node[left=0.5cm] {(a)} (B);
\node at ([xshift=1.5cm]current bounding box.east) [fill=lightgray,draw=black,inner sep=7pt,label=left:$Q$,label=below:$0$] {$s$};
\end{tikzpicture}
\end{document}