\documentclass{ngexrcs}
\usepackage{hyperref}

\title{1. Übungsblatt}
\subject{Algorithmische Graphentheorie}
\author{Jasper Gude \and Pia Rötgers}

\begin{document}
\maketitle
\points[\qquad]{20}
\section{Spannbäume \& Breitensuche}
Sei $G = \tup{V, E}$ ein zusammenhängender Graph mit Kantengewichten $w: E \to \NN$
und $s \in V \deg$ ein ausgezeichneter Knoten.
\begin{enumerate}
    \item 
        \begin{quote}
        Wenn $w(e) = 1$ für alle $e \in E$, dann ist der Breitensuchbaum mit
        Quelle $s$ ein minimaler Spannbaum.
        \end{quote}
        Die Breitensuche berechnet in diesem
        Fall den kürzesten Weg von jedem Knoten zum Knoten $s$, also den
        Breitensuchbaum. Dieser spannt also einen minimalen Spannbaum auf.
        \points{2}
    \item
        \begin{quote}
        Wenn $w(e) = 1$ für alle $e \in E$, dann ist jeder minimale Spannbaum
        von $G$ ein Breitensuchbaum mit Quelle $s$.
        \end{quote}
        Falsch, siehe \autoref{fig:msb}.
        \points{2}
        \begin{figure}[h]
            \centering
            \includegraphics[width=0.2\textwidth]{msb.eps}
            \caption{$\pi$-Zeiger des Breitensuchbaums und MSB blau hinterlegt.}
            \label{fig:msb}
        \end{figure}
    \item 
        \begin{quote}
        Wenn $w(e) \in \set{1, 2, 3}$ für alle $e \in E$, dann ist jeder minimale
        Spannbaum von $G$ ein Tiefensuchbaum mit Quelle $s$.
        \end{quote}
        Sei $w(e) = 1$ für
        alle $e \in E$ so gilt das Gegenbeispiel von oben. Also ist die Aussage
        falsch.
        \points{2}
\end{enumerate}

\section{Kreissuche}
\begin{enumerate}
    \item
        Wähle Startknoten $s$ und füge ihn in eine neue Queue $Q$ ein.
        
        Nimm den vordersten Knoten aus $Q$ und füge seine noch nicht verbrauchten
        Nachbarn ein. Markiere diesen Knoten anschließend als verbraucht ($black$).
        Wiederhole den Schritt solange bis $Q$ leer ist. Merke dir dabei die zwei
        letzten entnommenen Knoten. Sind sie gleich, hat der Graph einen
        einfachen Kreis.
        
        \begin{algorithmic}
            \alg{EinfacherKreis}(Graph $G$, Vertex $s$) \+ \\
                \alg{Initialize}($G$, $s$) \\
                $Q \gets$ new \alg{Queue}() \\
                $Q.$\alg{Enqueue}($s$) \\
                $t_1 \gets nil$ \\
                $t_2 \gets s$ \\
                while $Q \neq \emptyset$ do \+ \\
                    $u \gets Q.$\alg{Dequeue}() \\
                    $t_1 \gets t_2$ \\
                    $t_2 \gets u$ \\
                    foreach $v \in Adj[u]$ do \+ \\
                        if $v.color = white$ then \+ \\
                            $Q.$\alg{Enqueue}($v$) \-\- \\
                $u.color \gets black$ \- \\
                if $t_1 = t_2$ then \+ \\
                    return $true$ \- \\
                else \+ \\
                    return $false$
                
        \end{algorithmic}
\end{enumerate}

\section{Eulerwege}

\section{Graphmodellierung}

\end{document}
