diff --git a/Projektgruppe_175/src/base/Graph.java b/Projektgruppe_175/src/base/Graph.java index e7d5257..6db2ef7 100644 --- a/Projektgruppe_175/src/base/Graph.java +++ b/Projektgruppe_175/src/base/Graph.java @@ -148,12 +148,13 @@ public class Graph { while (nextVisitNodes.size() > 0) { + allVisitedNodes.add(nextVisitNodes.get(0)); + nextVisitNodes.addAll(getEdges(nextVisitNodes.get(0)).stream() .map(x -> x.getNodeB()) .filter(x -> !allVisitedNodes.contains(x)) .collect(Collectors.toList())); - allVisitedNodes.add(nextVisitNodes.get(0)); nextVisitNodes.remove(0); } diff --git a/doc/Dokumentation.tex b/doc/Dokumentation.tex index d724d14..7e4cd63 100644 --- a/doc/Dokumentation.tex +++ b/doc/Dokumentation.tex @@ -1,5 +1,13 @@ \documentclass{article} +\usepackage{amsmath} +\usepackage{algorithm} +\usepackage[noend]{algpseudocode} + +\makeatletter +\def\BState{\State\hskip-\ALG@thistlm} +\makeatother + \title{FOP Projektgruppe 175} \author{Steffen Wagner\\ Dennis Weinberger\\ @@ -15,13 +23,75 @@ Der Algorithmus für die Bildung der Kanten ist folgender: - tbc + \begin{algorithm} + \caption{Bildung von Kanten}\label{euclid} + \begin{algorithmic}[1] + \Procedure{generateEdges}{} + \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{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{append first element of } nextVisitNodes \text{ to } allVisitedNodes$ + \State $\text{delete first element of } nextVisitNodes$ + \BState \emph{end loop} + \EndProcedure + \end{algorithmic} + \end{algorithm} \subsection{Überprüfung der Erreichbarkeit aller Knoten} Der Algorithmus, der prüft, ob alle Knoten erreichbar sind, ist folgender: - tbc + \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. \end{document}