\section{Matchings in allgemeinen Graphen}
\begin{tasks}
	\item
	
	\begin{pseudocode}
	M = $\emptyset$
	visited = Array von False der Größe $|V|$ // Markiert gematchte Knoten
	
	for e in E do
		if nicht visited[u] und nicht visited[v] then
			M = $M \cup \{e\}$
			visited[u] = True
			visited[v] = True

	return M
	\end{pseudocode}
		
	Angenommen M wäre erweiterbar (d.h. es gibt eine Kante \{u,v\} mit u,v $\notin$ V(M)). Dann wurden sowohl u als auch v während des Algorithmus beim Durchlaufen der Kante \{u,v\} als frei angesehen und wäre somit der Menge M hinzugefügt worden. Das ist eine Widerspruch. \\\\
	\textbf{Laufzeit:} \\
	Initialisierung des Arrays: $\Oh(V)$\\
	Schleife: Jede Kante wird genau einmal betrachtet ($\Oh(V)$) und die Überprüfung und Markierung passieren in $\Oh(1)$. Also insgesamt $\Oh(E)$\\
	Das ergibt eine Gesamtlaufzeit von $\Oh(V+E)$
		
	\points{3}
	\item
	
	
	
	\points{3}
	\item
	
	\points{2}
	\item
	
	\points{3}
	\item
	
	\points{2}
	
	
\end{tasks}
