顯示圖演算法

顯示圖演算法

我想在 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};

相關內容