Anzeigen eines Graphenalgorithmus

Anzeigen eines Graphenalgorithmus

Ich möchte ein paar Folien zu Beamer erstellen, um zu zeigen, wie ein Graphenalgorithmus funktioniert.

Was ich brauche, ist, am Anfang ein Diagramm zu haben. Ich muss eine zusätzliche Beschriftung für die Knoten außerhalb davon haben können, ich muss gewichtete Kanten haben und ich muss die Farbe der Kanten ändern können. Ich habe unten ein Bild als Beispiel für die Funktionalität angehängt, die mein Diagramm haben soll, aber nach einiger Recherche habe ich keine Möglichkeit gefunden, all diese Dinge zu haben.

Da ich bei jedem Schritt eine kleine Änderung am Diagramm haben möchte – einen Knoten schwarz markieren, die Farbe der Kante ändern, die äußere Beschriftung des Knotens ändern –, wäre eine Lösung, den Code auf verschiedene Frames zu kopieren. Ist es möglich, dies so zu programmieren, dass es einfacher ist und weniger Frames benötigt?

Dies ist ein Beispiel, wie mein Diagramm aussehen soll

Antwort1

labelSie können für den Text außerhalb der Zustände und für die Beschriftung der Kanten Knoten verwenden .

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

Bildbeschreibung hier eingeben

Um den Code zu vereinfachen, kann der Beschriftungstext als Eingabe angegeben werden, Stateindem die Definition wie folgt geändert wird:

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

und dann die Zustände zeichnen als

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

verwandte Informationen