我想用 LaTeX 编写以下算法。
我使用的代码如下:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmic}
%\usepackage{algpseudocode}
%\algtext*{EndIf}
\begin{document}
\begin{algorithm}
\caption{Left-rotate $(T,x)$}
\begin{algorithmic}
\STATE $y \gets \mathrm{right}[x]$
\STATE $ \mathrm{right}[x] \gets \mathrm{left}[y]$
\IF {$ \mathrm{left}[y] \neq \mathrm{NIL} $}
\STATE $ p[\mathrm{left}[y]] \gets x $
\ENDIF
\IF {$ p[x]=\mathrm{NIL} $}
\STATE $ \mathrm{root}[T] \gets y $
\ELSIF {$ x=\mathrm{left}[p[x]] $}
\STATE $ \mathrm{left}[p[x]] \gets y $
\ELSE
\STATE $ \mathrm{right}[p[x]] \gets y $
\ENDIF
\STATE $ \mathrm{left}[y] \gets x $
\STATE $ p[x] \gets x $
\end{algorithmic}
\end{algorithm}
\end{document}
我已经尝试了这个平台上的所有解决方案,但不幸的是,没有一个起作用。生成的输出如下:
我不想要,如果可以在 的下面一行\ENDIF
就好了,并且嵌套应该按照第一张图片进行。请帮帮我。then
\IF
答案1
只需将包选项添加noend
到algorithmic
:
\usepackage[noend]{algorithmic}
完整代码如下
\documentclass{article}
\usepackage{algorithm}
\usepackage[noend]{algorithmic}
%\usepackage{algpseudocode}
%\algtext*{EndIf}
\begin{document}
\begin{algorithm}
\caption{Left-rotate $(T,x)$}
\begin{algorithmic}
\STATE $y \gets \mathrm{right}[x]$
\STATE $ \mathrm{right}[x] \gets \mathrm{left}[y]$
\IF {$ \mathrm{left}[y] \neq \mathrm{NIL} $}
\STATE $ p[\mathrm{left}[y]] \gets x $
\ENDIF
\IF {$ p[x]=\mathrm{NIL} $}
\STATE $ \mathrm{root}[T] \gets y $
\ELSIF {$ x=\mathrm{left}[p[x]] $}
\STATE $ \mathrm{left}[p[x]] \gets y $
\ELSE
\STATE $ \mathrm{right}[p[x]] \gets y $
\ENDIF
\STATE $ \mathrm{left}[y] \gets x $
\STATE $ p[x] \gets x $
\end{algorithmic}
\end{algorithm}
\end{document}
得到结果:
我个人更喜欢带有结束标记的版本,该算法的可读性更好......