From 5eb7dd85acb607196d13e88a27da5888f8b5311b Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Thu, 14 Feb 2019 16:10:42 +0100 Subject: [PATCH 1/2] Mehr Doku zu Erreichbarkeit von Knoten --- doc/Dokumentation.tex | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/doc/Dokumentation.tex b/doc/Dokumentation.tex index d724d14..acc9c1c 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\\ @@ -22,6 +30,29 @@ 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{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} \end{document} From 334a12cbee9e871d6d77f772c118937810ff912a Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Thu, 14 Feb 2019 16:33:08 +0100 Subject: [PATCH 2/2] WIP and fix --- Projektgruppe_175/src/base/Graph.java | 3 +- doc/Dokumentation.tex | 43 +++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) 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 acc9c1c..7e4cd63 100644 --- a/doc/Dokumentation.tex +++ b/doc/Dokumentation.tex @@ -23,7 +23,30 @@ 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} @@ -45,14 +68,30 @@ \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{append first element of } nextVisitNodes \text{ to } allVisitedNodes$ \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}