diff --git a/23ss_MiM_Bonus_01.pdf b/Blatt1/23ss_MiM_Bonus_01.pdf
similarity index 100%
rename from 23ss_MiM_Bonus_01.pdf
rename to Blatt1/23ss_MiM_Bonus_01.pdf
diff --git a/Acht-Damen.py b/Blatt1/Acht-Damen.py
similarity index 100%
rename from Acht-Damen.py
rename to Blatt1/Acht-Damen.py
diff --git a/Blatt1/README.md b/Blatt1/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6869c6e2b17a74e3873328ef50151ffb1e29c435
--- /dev/null
+++ b/Blatt1/README.md
@@ -0,0 +1,35 @@
+# Travelling Salesman Problem
+
+Die Klasse `Node` bietet einen Wrapper für die Koordinaten und abstrahiert die Ausgabe im Plot und als Text.
+
+Des weiteren wurden einige Funktionen abstrahiert um die Lesbarkeit zu verbessern:
+- `distance()` ermittelt den Abstand zwischen zwei Punkten.
+- `total_distance` bildet die Summe aller Abstände entlang der Punkte in der übergebenen Liste. Der Parameter `circle` schließt den Kreis von letzter zu erster `Node`.
+- `plot_path()` und `plot_route()` abstrahieren die Interkation mit `plt`.
+- `get_closest_node()` ermittelt die nahgeliegenste `Node` zu `current_node`. Ist `current_node` in `nodes` enthalten wird sich der Abstand 0 ergeben. Entsprechend sollte diese vor dem Aufruf entfernt werden.
+- `parse_data_file()` liest Dateien im Format von `tsp01.data` und erstellt eine entsprechende Liste von `Node`s.
+
+## Brute Force
+Hier werden alle möglichen Kombinationen der Nodes überprüft.
+Dafür kommt die Funktion `itertools.permutations()` zum Einsatz.
+Sie erlaubt das durchlaufen aller Möglichkeiten in einer for-Schleife und so einen sehr klaren Algorithmus:
+Für jede mögliche Route merke Kombination und Länge, falls diese kürzer als die bislang kürzeste Route ist.
+Zuletzt wird die Kürzeste ausgegeben.
+
+## Nearest Neighbour
+Durch diese Heuristik können erheblich mehr Punkte in die Berechnung einbezogen werden, allerdings weist das Ergebnis meist sehr lange Sprünge und Wegkreuzungen auf.
+1. Es wird eine Liste aller noch nicht verbundenen, übrigen Nodes erstellt.
+2. Als Startpunkt wird das erste Element der Route hinzugefügt.
+3. Der selbe Punkt wird aus den übrigen Nodes entfernt.
+4. Solange noch Nodes übrig sind:
+   1. Ermittle die nächste Node zur zuletzt verbundenen,
+   2. füge sie der Route hinzu und
+   3. entferne sie aus den übrigen Nodes.
+5. Gib die entstandene Route aus.
+
+### 2-opt
+Der 2-opt-Heuristik soll Kreuzungen finden und sie durch geschicktes Vertauschen die Nodes eliminieren.
+So wird das Ergebnis der Nearest-Neighbour-Heuristik erheblich verbessert.
+
+Ich konnte nicht die Ruhe finden das ordentlich umzusetzen.
+Die auftretenden Fehler haben sehr wahrscheinlich mit den Zugriffen auf die einzelnen Elemente und deren erneute Zuweisung zu tun.
diff --git a/TravellingSalesman.py b/Blatt1/TravellingSalesman.py
similarity index 99%
rename from TravellingSalesman.py
rename to Blatt1/TravellingSalesman.py
index 64bf2b852ef80def8237a1e0bb4b794409ff88e2..842ef0653b0c66757ba2d62ab530c1aab2aed7e8 100644
--- a/TravellingSalesman.py
+++ b/Blatt1/TravellingSalesman.py
@@ -177,7 +177,7 @@ def parse_data_file(path: str) -> list:
 if __name__ == "__main__":
     nodes = []
     if from_file:
-        nodes = parse_data_file("tsp01.data")
+        nodes = parse_data_file("Blatt1/tsp01.data")
     else:
         for i in range(num_nodes):
             nodes.append(Node(x=randint(0, 100), y=randint(0, 100), name=str(hex(i))))
diff --git a/tsp01.data b/Blatt1/tsp01.data
similarity index 100%
rename from tsp01.data
rename to Blatt1/tsp01.data