Errori con algoritmo e pacchetti di utilizzo algoritmico
Oct 16 2020
Sto scrivendo uno pseudocodice all'interno dell'algoritmo e dell'ambiente algoritmico, ma sia la numerazione che la composizione sono completamente incasinate.
\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}
Ho provato ad aggiungere e rimuovere le parentesi graffe ovunque, ma non fa molto.
Risposte
1 Werner Oct 16 2020 at 00:45
Stai mescolando pacchetti incompatibili qui - algorithmic(dal algorithmsbundle ) e algpseudocode(da algorithmicx). Elimina il primo e crea alcune nuove definizioni per le tue variabili e chiamate di funzione. Ovviamente puoi cambiarli in base ai tuoi gusti.
\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}