显示图形算法

显示图形算法

我想制作几张有关 Beamer 的幻灯片来展示图形算法的工作方式。

我需要的是能够在开始时拥有一个图表。能够在节点之外添加节点的附加标签,能够拥有加权边并更改边的颜色。我在下面附上了一张图片,作为我希望我的图表具有哪些功能的示例,但经过一番研究,我没有找到一种方法来拥有所有这些功能。

因为在每一步中,我都想在图表上做一些小改动 - 将一个节点标记为黑色、更改边缘颜色、更改节点的外部标签,一种解决方案是将代码复制到不同的帧上。是否可以以某种方式对其进行编程,使其更容易并在较少的帧上进行?

这是我希望我的图表看起来像的一个例子

答案1

您可以使用label状态之外的文本,并使用节点来标记边。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta}
\tikzset{%
  node distance=2cm,
  State/.style={%
    draw,circle,
    thick,
    color=black!60!green,
    inner sep=0pt,
    minimum size=10mm,
    fill=blue!40!green,
    text=white,
  },
  StateMark/.style={%
    State,
    fill=black},
  Edge/.style={%
    color=blue!40!green,
    very thick,
    -{Triangle[scale=1.1]},%% Try Latex instead oc Triangle
    text=black,
  },
  EdgeMark/.style={%
    Edge,
    color=blue!90!green,
    text=black,
  }
}
\begin{document}
\begin{tikzpicture}
  \node[StateMark,label=90:r] (S1) {$\infty$};
  \node[StateMark,label=90:s,right=of S1] (S2){0};
  \node[State,label=90:t,right=of S2] (S3){2};
  \node[State,label=90:x,right=of S3] (S4){6};
  %%
  \draw[Edge] (S1) -- node[above,pos=0.5]{5} (S2);
  \draw[Edge] (S1) to[bend right] node[below,pos=0.5]{5} (S3);%% Default bend = 30 degrees
  \draw[EdgeMark] (S2) -- node[above,pos=0.5]{2} (S3);
  \draw[EdgeMark] (S2) to[bend left=40] node[above,pos=0.5]{5} (S4);
  \draw[Edge] (S3) -- node[above,pos=0.5]{7} (S4);  
\end{tikzpicture}
\end{document}

在此处输入图片描述

State为了简化代码,可以通过将定义更改为将标签文本作为输入

  State/.style={%
    draw,circle,
    thick,
    color=black!60!green,
    inner sep=0pt,
    minimum size=10mm,
    fill=blue!40!green,
    text=white,
    label=90:#1,
  },
  StateMark/.style={%
    State=#1,
    fill=black},

然后绘制状态为

  \node[StateMark=r] (S1) {$\infty$};
  \node[StateMark=s,right=of S1] (S2){0};
  \node[State=t,right=of S2] (S3){2};
  \node[State=x,right=of S3] (S4){6};

相关内容