\documentclass{article} \usepackage{amsmath} \usepackage{algorithm} \usepackage[noend]{algpseudocode} \usepackage[utf8]{inputenc} \makeatletter \def\BState{\State\hskip-\ALG@thistlm} \makeatother \title{FOP Projektgruppe 175} \author{Steffen Wagner\\ Dennis Weinberger\\ Jonas Süß\\ Joachim Schmidt} \begin{document} \maketitle \tableofcontents \section{Der Graph} \subsection{Bildung der Kanten} Der Algorithmus für die Bildung der Kanten ist folgender: \begin{algorithm} \caption{Bildung von Kanten}\label{euclid} \begin{algorithmic}[1] \Procedure{generateEdges}{} \EndProcedure \end{algorithmic} \end{algorithm} % Erklärung des Algorithmus \subsection{Überprüfung der Erreichbarkeit aller Knoten} Der Algorithmus, der prüft, ob alle Knoten erreichbar sind, ist folgender: \begin{algorithm} \caption{Erreichbarkeit aller Knoten}\label{euclid} \begin{algorithmic}[1] \Procedure{allNodesConnected}{} \State $\textit{firstNode} \gets \text{first element of }\textit{nodes}$ \State $allVisitedNodes \gets \textit{empty}$ \State $nextVisitNodes \gets empty$ \State $\text{append } firstNode \text{ to } allVisitedNodes$ \State $\text{neighborsOf } firstNode$ \State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$ \State $\rightarrow \text{append to } nextVisitNodes$ \BState \emph{loop} \If {$nextVisitNodes \text{ is empty}$} break \EndIf \State $\text{append first element of } nextVisitNodes \text{ to } allVisitedNodes$ \State $\text{neighborsOf first element of } nextVisitNodes$ \State $\rightarrow \text{filter out all } x \text{ where } allVisitedNodes \text{ contains } x$ \State $\rightarrow \text{append to } nextVisitNodes$ \State $\text{delete first element of } nextVisitNodes$ \BState \emph{end loop} \EndProcedure \end{algorithmic} \end{algorithm} Der Algorithmus sammelt sozusagen alle Knoten, die aufgrund von momentanen Erkenntnissen erreichbar sind, in der Liste \texttt{nextVisitNodes}. Hingegen sind alle Knoten, die schon erreicht worden sind, in der Liste \texttt{allVisitedNodes} gespeichert. Der Algorithmus geht die Liste \texttt{nextVisitNodes} solange durch, bis diese leer ist. In jeder Iteration wird das erste Element der Liste aus der Liste entfernt. Zunächst wird dieses Element der Liste \texttt{allVisitedNodes} hinzugefügt. Daraufhin werden die Nachbarn dieses Elements herausgefunden. Diejenigen Nachbarn, die schon in der Liste \texttt{allVisitedNodes} vorhanden sind, werden verworfen. Die restlichen Nachbarn werden der Liste \texttt{nextVisitNodes} hinzugefügt. \subsection{Wege finden} \subsection{Kürzester Pfad zu allen Knoten} \end{document}