我尝试按照本教程解决此问题,但没有成功。我之前使用的是 \If 和 \EndIf,现在我已切换到 \eIf,但没有成功。我在每行末尾使用 \; 以避免段落中断。我的 if 有什么问题?!
- http://ctan.mirror.garr.it/mirrors/CTAN/macros/latex/contrib/algorithm2e/doc/algorithm2e.pdf
-
\begin{algorithm} \ForAll {Partition p} skip1=0 \ForAll {Edges i=(a,b)} skip2=0 \ForAll {bucket in p} j=0 % conta i caratteri \ForAll{chr in bucket} \eIf{ chr == a or chr == b}{ other2find = set(set((a,b,)) - set((chr,))) \; % give the missing element to find skip1=1 \; \ForAll {other char k} \; \eIf{other2find \== k} { unstableNumber=unstableNumber+1 \; skip2=1 \; break \; % smette di cercare nei caratteri del bucket \EndIf \; break \; } }{ j=j+1 } \EndFor %\If{skip1=1} % se ho trovato almeno un nodo in un bucket, salto tutta la partizione % % perche' tanto l'altro nodo sara da qualche parte ma non rendera di certo la partizione % % non stabile % break %tutto questo codice non serve perche' e incluso nel break dopo if(other2find) \EndFor \EndFor \If{skip2} break % non serve controllare tutti gli archi per sapere che una partizione non e' stabile \EndIf \If{!skip2} stablePartition.append(p) skip2=0 \EndIf \EndFor \end{algorithm}
答案1
你似乎把你的语法和algorithm2e
以及algorithmicx
后者使用\For{..} ... \EndFor
and\If{..} ... \EndIf
构造,而前者使用\For{..}{...}
and\If{..}{...}
构造和\;
行终止宏。
这是一个algorithm2e
实现:
\documentclass{article}
\usepackage{amsmath,algorithm2e}
\newcommand{\var}{\texttt}
\begin{document}
\begin{algorithm}
\ForAll {Partition p}{%
$\var{skip1} = 0$\;
\ForAll {\text{edges} $i = (a,b)$}{%
$\var{skip2} = 0$\;
\ForAll {\text{bucket in $p$}}{%
$j = 0$ % conta i caratteri
\ForAll{\text{\var{chr} in bucket}}{%
\eIf{\text{$\var{chr} = a$ or $\var{chr} = b$}}{
$\var{other2find} = set(set((a,b,)) - set((chr,)))$\; % give the missing element to find
$\var{skip1} = 1$\;
\ForAll {\text{other char $k$}}{%
\If{$\var{other2find} = k$}{%
$\var{unstableNumber} = \var{unstableNumber} + 1$\;
$\var{skip2} = 1$\;
break\; % smette di cercare nei caratteri del bucket
}
break\;
}
}{
$j = j + 1$\;
}
}
}
}
\If{\var{skip2}}{%
break\; % non serve controllare tutti gli archi per sapere che una partizione non e' stabile
}
\If{not \var{skip2}}{%
stablePartition.append(p)\;
$\var{skip2} = 0$\;
}
}
\end{algorithm}
\end{document}
请注意,建议为变量定义定义一个宏(例如skip1
,,,,...),以便在整个算法中使用。您可能希望对函数调用执行相同的操作,或者使用。请参阅skip2
chr
\call
algorithm2e
文档了解更多选项/详细信息。