1
|
{"name":"Graph","modules":[{"name":"Graph","text":"class Graph {\n // Attribut, das die aktuelle Anzahl an Knoten speichert\n int anzKnoten;\n // Array, das aktuell anzKnoten viele Knoten Objekte speichert.\n Knoten[] knoten;\n // Adjazenzmatrix\n int[][] kanten;\n \n /**\n * Erzeugt einen neuen Graphen.\n * \n * Der neue Graph hat Platz fuer maxAnzahlKnoten.\n * Er enthaelt nach der Initialisierung weder Knoten noch\n * Kanten.\n * @param maxAnzahlKnoten die maximale Anzahl an Knoten\n */\n Graph(int maxAnzahlKnoten) {\n // Initialisierung der Attribute\n anzKnoten = 0; // Der Graph enthaelt noch keine Knoten\n\n // TODO 1: Initialisiere das Knotenarray knoten und die Adjazenzmatrix kanten\n\n // Initialisierung der leeren Adjazenzmatrix\n for (int i = 0; i < maxAnzahlKnoten; i++) {\n for (int j = 0; j < maxAnzahlKnoten; j++) {\n kanten[i][j] = -1;\n }\n }\n }\n\n /**\n * Liefert die Bezeichnung eines Knoten\n * \n * @param knotenIndex der Index des Knoten\n * @return die Bezeichnung des Knoten\n */\n String knotenBezeichnungFinden(int knotenIndex) {\n Knoten knotenAnIndex = knoten[knotenIndex];\n return knotenAnIndex.bezeichnung;\n }\n\n /**\n * Findet den Index eines Knoten anhand seiner Bezeichnung\n * \n * @param bezeichnung die Bezeichnung des Knoten\n * @return den Index des Knoten, -1 falls Knoten nicht gefunden\n */\n int knotenFinden(String bezeichnung) {\n for (int i = 0; i < anzKnoten; i++) {\n if(knoten[i].bezeichnung == bezeichnung) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Fuegt einen neuen Knoten dem Graph hinzu\n * \n * @param bezeichnung die Bezeichnung des neuen Knoten\n */\n void knotenHinzufuegen(String bezeichnung) {\n Knoten neuerKnoten /* FIXME 2: Erzeuge einen neuen Knoten mit der uebergebenen Bezeichnung */;\n // TODO 2: Speichere den neuen Knoten an der richtigen Stelle im Knotenarray\n // und erhoehe die Anzahl der aktuell gespeicherten Knoten.\n }\n \n /**\n * Fuegt eine gerichtete Kante dem Graphen hinzu\n * \n * @param start der Startknoten der Kante\n * @param ziel der Zielknoten der Kante\n * @param gewicht das Kantengewicht\n */\n void kanteHinzufuegen(String start, String ziel, int gewicht) {\n int startIndex /* FIXME 3: Finde den passenden Knotenindex */;\n int zielIndex /* FIXME 3: Finde den passenden Knotenindex */;\n // TODO 3: Speichere das Kantengewicht an der richtigen Stelle in der\n // Adjazenzmatrix.\n }\n\n /**\n * Fuegt eine ungerichtete Kante dem Graphen hinzu\n * \n * @param k1 erster Nachbarknoten\n * @param k2 zweiter Nachbarknoten\n * @param gewicht das Kantengewicht\n */\n void ungerichteteKanteHinzufuegen(String k1, String k2, int gewicht) {\n kanteHinzufuegen(k1, k2, gewicht);\n kanteHinzufuegen(k2, k1, gewicht);\n }\n\n /*******************************************************\n * Eigenschaften eines Graphen *\n *******************************************************/\n\n /**\n * Zaehlt die ausgehenden Kanten eines Knotens\n * \n * @param bezeichnung die Bezeichnung des Knoten\n * @return die Anzahl der ausgehenden Kanten\n */\n int ausgehendeKantenZaehlen(String bezeichnung) {\n int knotenIndex /* FIXME 6: Finde den richtigen Knotenindex */;\n // TODO 6: Zaehle die Anzahl der ausgehenden Kanten und gibt diese zurueck\n return 0 /* FIXME 6 */;\n }\n\n /**\n * Zaehlt die Sackgassen eines Graphen\n * \n * Eine Sackgasse ist ein Knoten mit weniger als zwei\n * ausgehenden Kanten.\n * @return die Anzahl der Sackgassen\n */\n int sackgassenZaehlen() {\n // TODO 9: Implementiere die Methode.\n // Beurteile deine Implementierung, ob sie fuer jeden Art von Graph\n // funktioniert.\n return 0 /* FIXME 9 */;\n }\n\n /**\n * Gibt die Bezeichnungen aller Nachbarknoten aus\n * \n * @param bezeichnung die Bezeichnung des Knoten\n */\n void nachbarnAusgeben(String bezeichnung) {\n int knotenIndex /* FIXME 5: Finde den passenden Knotenindex*/;\n // TODO 5: Gib alle Bezeichungen der Nachbarknoten aus (println)\n \n }\n\n /**\n * Prueft ob der Graph ungewichtet ist\n * \n * Ein Graph gilt als ungewichtet falls keine Kante ein\n * Gewicht ueber 1 hat. \n * \n * @return true falls der Graph ungewichtet ist, sonst false\n */\n boolean istUngewichtet() {\n // TODO 7: Implementiere die Methode, die jede Kante ueberprueft, ob ihr \n // Gewicht > 1 ist.\n return true;\n }\n\n /**\n * Prueft ob der Graph ungerichtet ist\n * \n * Ein Graph gilt als ungerichtet, wenn die Adjazenzmatrix\n * achsensymmetrisch zu ihrer Diagonale ist,\n * beziehungsweise wenn die Information in der\n * Adjazenzmatrix in beide Richtungen gleich ist.\n * \n * @return true falls der Graph ungerichtet ist, sonst false\n */\n boolean istUngerichtet() {\n // TODO 8: Implementiere die Methode, die ueberprueft, ob jede Kante in\n // beide Richtungen identisch ist.\n return true;\n }\n}\n\n/*****************************************************\n * Manfreds Aufgaben *\n *****************************************************/\n\nManfredsLabyrinth labyrinth = new ManfredsLabyrinth();\nManfred.sagt(\"\"\"\n Wilkommen in meinem Labyrinth!\n\n Hilf mir bitte herrauszufinden,\n welche Zimmer an mein\n Atelier angrenzen? \n \"\"\");\nprintln();\n\nif(labyrinth.ausgehendeKantenZaehlen(\"Atelier\") == 5) {\n Manfred.sagt(\"\"\"\n \n \n \n Ach ja stimmt.\n \n An mein Atelier grenzen\n die fuenf Raeume: \n \"\"\");\n labyrinth.nachbarnAusgeben(\"Atelier\");\n\n} else {\n System.exit(0);\n}\n\nGraph lab1 = new Lab1();\nGraph lab2 = new Lab2();\n\nprintln();\nManfred.sagt(\"\"\"\n Bevor ich mich fuer ein\n neues Labyrinth entscheide,\n muss ich folgendes wissen:\n\n 1. Sind alle Gaenge gleich\n schwierig?\n 2. Gibt es Einbahnstrassen?\n 3. Wie viele Sackgassen gibt es?\n \"\"\");\n\nprintln();\nif(!lab1.istUngewichtet() && lab1.istUngerichtet() && (lab1.sackgassenZaehlen() == 2)) {\n Manfred.sagt(\"\"\"\n \n \n \n Danke fuer deine Hilfe!\n \n Das erste Labyrinth ist also\n ungerichtet, ungewichtet und hat\n zwei Sackgassen.\n \"\"\");\n} else {\n System.exit(0);\n}\n\nprintln();\nif(lab2.istUngewichtet() && !lab2.istUngerichtet() && (lab2.sackgassenZaehlen() == 9)) {\n Manfred.sagt(\"\"\"\n \n \n \n Ok.\n \n Das zweite Labyrinth hat gleiche\n Wege, aber nicht immer in\n beide richtungen und es besteht\n fast nur aus Sackgassen (9/10).\n \"\"\");\n} else {\n System.exit(0);\n}","identical_to_repository_version":false,"is_copy_of_id":1404230,"repository_file_version":2},{"name":"Knoten","text":"class Knoten {\n String bezeichnung;\n\n Knoten(String neueBezeichnung) {\n bezeichnung = neueBezeichnung;\n }\n}","identical_to_repository_version":false,"is_copy_of_id":1404231,"repository_file_version":1},{"name":"Labyrinthe","text":"class ManfredsLabyrinth extends Graph {\n ManfredsLabyrinth() {\n super(16);\n\n knotenHinzufuegen(\"Poolzimmer\");\n knotenHinzufuegen(\"Badezimmer\");\n knotenHinzufuegen(\"Speisekammer\");\n knotenHinzufuegen(\"Arbeitszimmer\");\n knotenHinzufuegen(\"Hobbyraum\");\n knotenHinzufuegen(\"Kueche\");\n knotenHinzufuegen(\"Wohnzimmer\");\n knotenHinzufuegen(\"Gaestezimmer\");\n knotenHinzufuegen(\"Atelier\");\n knotenHinzufuegen(\"Misthaufen\");\n knotenHinzufuegen(\"Bibliothek\");\n knotenHinzufuegen(\"Musikzimmer\");\n knotenHinzufuegen(\"Heimkino\");\n knotenHinzufuegen(\"Gaestetoilette\");\n knotenHinzufuegen(\"Kleiderschrank\");\n knotenHinzufuegen(\"Schlafzimmer\");\n\n ungerichteteKanteHinzufuegen(\"Poolzimmer\", \"Badezimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Badezimmer\", \"Wohnzimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Badezimmer\", \"Arbeitszimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Arbeitszimmer\", \"Speisekammer\", 1);\n ungerichteteKanteHinzufuegen(\"Arbeitszimmer\", \"Atelier\", 1);\n ungerichteteKanteHinzufuegen(\"Speisekammer\", \"Kueche\", 1);\n ungerichteteKanteHinzufuegen(\"Hobbyraum\", \"Gaestezimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Hobbyraum\", \"Gaestetoilette\", 1);\n ungerichteteKanteHinzufuegen(\"Kueche\", \"Atelier\", 1);\n ungerichteteKanteHinzufuegen(\"Kueche\", \"Misthaufen\", 1);\n ungerichteteKanteHinzufuegen(\"Wohnzimmer\", \"Atelier\", 1);\n ungerichteteKanteHinzufuegen(\"Wohnzimmer\", \"Bibliothek\", 1);\n ungerichteteKanteHinzufuegen(\"Gaestezimmer\", \"Hobbyraum\", 1);\n ungerichteteKanteHinzufuegen(\"Gaestezimmer\", \"Gaestetoilette\", 1);\n ungerichteteKanteHinzufuegen(\"Atelier\", \"Misthaufen\", 1);\n ungerichteteKanteHinzufuegen(\"Atelier\", \"Bibliothek\", 1);\n ungerichteteKanteHinzufuegen(\"Bibliothek\", \"Musikzimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Bibliothek\", \"Kleiderschrank\", 1);\n ungerichteteKanteHinzufuegen(\"Musikzimmer\", \"Heimkino\", 1);\n ungerichteteKanteHinzufuegen(\"Heimkino\", \"Schlafzimmer\", 1);\n ungerichteteKanteHinzufuegen(\"Kleiderschrank\", \"Schlafzimmer\", 1);\n }\n}\n\n\nclass Lab1 extends Graph {\n Lab1() {\n super(10);\n knotenHinzufuegen(\"r1\");\n knotenHinzufuegen(\"r2\");\n knotenHinzufuegen(\"r3\");\n knotenHinzufuegen(\"r4\");\n knotenHinzufuegen(\"r5\");\n\n ungerichteteKanteHinzufuegen(\"r1\", \"r2\", 1);\n ungerichteteKanteHinzufuegen(\"r2\", \"r3\", 2);\n ungerichteteKanteHinzufuegen(\"r3\", \"r4\", 3);\n ungerichteteKanteHinzufuegen(\"r4\", \"r5\", 4);\n }\n}\n\n\nclass Lab2 extends Graph {\n Lab2() {\n super(10);\n\n knotenHinzufuegen(\"r1\");\n knotenHinzufuegen(\"r2\");\n knotenHinzufuegen(\"r3\");\n knotenHinzufuegen(\"r4\");\n knotenHinzufuegen(\"r5\");\n knotenHinzufuegen(\"r6\");\n knotenHinzufuegen(\"r7\");\n knotenHinzufuegen(\"r8\");\n knotenHinzufuegen(\"r9\");\n knotenHinzufuegen(\"hub\");\n\n ungerichteteKanteHinzufuegen(\"r1\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r2\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r3\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r4\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r5\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r6\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r7\", \"hub\", 1);\n ungerichteteKanteHinzufuegen(\"r8\", \"hub\", 1);\n kanteHinzufuegen(\"r9\", \"hub\", 1);\n\n }\n}","identical_to_repository_version":false,"is_copy_of_id":1436032,"repository_file_version":1},{"name":"Manfred","text":"class Manfred {\n static String[] gesicht = \"\"\"\n /) (\\\\ \n .-._((,~~.))_.-, \n `-. @@ ,-' \n / ,o--o. \\\\ \n ( ( .__. ) ) \n ) `----' ( \n / \\\\ \n / \\\\ \n / \\\\ \n \"\"\".split(\"\\\\r?\\\\n\");\n \n static void sagt(String nachricht) {\n String[] zeilen = nachricht.split(\"\\\\r?\\\\n\");\n for (int i = 0; i < Math.max(gesicht.length, zeilen.length); i++) {\n String zeile = \"\";\n if(i < gesicht.length) {\n zeile = gesicht[i];\n } else {\n zeile = \"\";\n }\n\n if(i < zeilen.length) {\n zeile += zeilen[i]; \n }\n println(zeile);\n }\n }\n}","identical_to_repository_version":false,"is_copy_of_id":1438401,"repository_file_version":1}],"settings":{"libraries":[]}}
|