Fehler mit Algorithmus und algorithmischen Usepackages
Oct 16 2020
Ich schreibe Pseudocode innerhalb des Algorithmus und der algorithmischen Umgebung, aber sowohl die Nummerierung als auch der Satz werden völlig durcheinander gebracht.
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage[noend]{algpseudocode}
\usepackage{amsmath,amssymb}
\begin{document}
\begin{algorithm}
\vspace*{2mm}
\caption{Backtracking for TSP} \label{alg:backtracking}
\emph{TSP\_BruteForce1(R,S)}
\begin{algorithmic}[1]
\If {$S$ empty}
\State $minCost$ \gets length tour
\Else{}
\State $minCost \gets \infty$
\ForEach {city $i$ in $S$}
\State Remove $i$ from $S$ and append $i$ to $R$
\State $minCost$ \gets $min(minCost, TSP\_BruteForce1(R,S))$
\State Reinsert $i$ in $S$ and remove $i$ from $R$
\EndFor
\EndIf
\Return {$minCost$}
\end{algorithmic}
\end{algorithm}
\end{document}
Ich habe versucht, überall geschweifte Klammern hinzuzufügen und zu entfernen, aber das macht nicht viel.
Antworten
1 Werner Oct 16 2020 at 00:45
Sie mischen hier inkompatible Pakete - algorithmic(aus dem algorithmsBundle ) und algpseudocode(aus algorithmicx). Löschen Sie die erstere und nehmen Sie einige neue Definitionen für Ihre Variablen und Funktionsaufrufe vor. Natürlich können Sie diese nach Ihren Wünschen ändern.
\documentclass{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{amsmath}
\newcommand{\var}{\texttt}
\newcommand{\func}{\textsl}
\newcommand{\algorithmicforeach}{\textbf{for each}}
\algdef{S}[FOR]{ForEach}[1]{\algorithmicforeach\ #1\ \algorithmicdo}
\begin{document}
\begin{algorithm}
\caption{Backtracking for TSP}
\func{TSP\_BruteForce1}($\var{R}, \var{S}$)
\begin{algorithmic}[1]
\If {$S$ empty}
\State $\var{minCost} \gets \text{length tour}$
\Else
\State $\var{minCost} \gets \infty$
\ForEach {city $i$ in $S$}
\State Remove $i$ from $S$ and append $i$ to $R$
\State $\var{minCost} \gets \min(\var{minCost}, \func{TSP\_BruteForce1}(R, S))$
\State Reinsert $i$ in $S$ and remove $i$ from $R$
\EndFor
\EndIf
\State \Return \var{minCost}
\end{algorithmic}
\end{algorithm}
\end{document}