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)$\\
Sei M das vom Algorithmus berechnete maximale Matching und M* das optimale maximale Matching. \\
Für jede Kante $e*=\{u,v\}\in$ M* gilt: mindestens einer der beiden Knoten $u$ oder $v$ muss über eine Kante aus M abgedeckt werden, sonst wäre der M nicht nicht-erweiterbar. \\
Eine Kante aus M hat genau zwei Endknoten und kann daher höchstens zwei verschiedene Kanten aus M* ''blockieren''. Da alle Kanten in M* disjunt sind kann man daraus folgern: