Erreurs avec les algorithmes et les packages d'utilisation algorithmiques

Oct 16 2020

J'écris un pseudo-code dans l'algorithme et l'environnement algorithmique, mais la numérotation et la composition sont complètement perturbées.

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

J'ai essayé d'ajouter et de supprimer des accolades partout, mais cela ne fait pas grand-chose.

Réponses

1 Werner Oct 16 2020 at 00:45

Vous mélangez ici des packages incompatibles - algorithmic(du algorithmsbundle ) et algpseudocode(from algorithmicx). Supprimez l'ancien et créez de nouvelles définitions pour vos variables et vos appels de fonction. Bien sûr, vous pouvez les modifier à votre guise.

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