Mostrando un algoritmo gráfico

Mostrando un algoritmo gráfico

Me gustaría hacer un par de diapositivas sobre Beamer para mostrar cómo funciona un algoritmo gráfico.

Lo que necesito es poder tener al principio un gráfico. Poder tener una etiqueta adicional de los nodos, fuera de ellos, poder tener bordes ponderados y cambiar el color de los bordes. Adjunté una imagen a continuación, como ejemplo de la funcionalidad que quiero que tenga mi gráfico, pero después de investigar un poco, no encontré una manera de tener todas esas cosas.

Dado que en cada paso quiero hacer un pequeño cambio en el gráfico: marcar un nodo en negro, cambiar el color del borde, cambiar la etiqueta exterior del nodo, una solución sería copiar el código en diferentes marcos. ¿Es posible programarlo de alguna manera para que sea más fácil y en marcos más pequeños?

Este es un ejemplo de cómo quiero que se vea mi gráfico.

Respuesta1

Puede usarlo labelpara el texto fuera de los estados y nodos para etiquetar los bordes.

\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}

ingrese la descripción de la imagen aquí

Para simplificar el código, se puede proporcionar el texto de la etiqueta como entrada Statecambiando la definición como

  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},

y luego dibujar los estados como

  \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};

información relacionada