aboutsummaryrefslogtreecommitdiff
path: root/Info/11/NTG/1/Graphen_Implementierung/GraphVorlage.json
blob: a1a16cfadd1109d3438a1cd567c951070e8fbda1 (plain)
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":[]}}