| Generierte Dokumentation der praktischen Arbeit von Simon Tiffert |
00001 /* 00002 * 00003 * Datei: Verarbeitung.java 00004 * 00005 * --------------------------------- 00006 * 00007 * Datum: $Date: 2004/05/12 11:02:53 $ 00008 * Autor: Simon Tiffert 00009 * Prüfungsnummer: 40 00010 * Firma: T-Systems 00011 * eMail-Adresse: simon.tiffert@t-systems.com 00012 * Version: $Revision: 1.17 $ 00013 * 00014 * --------------------------------- 00015 * 00016 */ 00017 00018 package main.verarbeitung; 00019 00020 /** 00021 * Die Klasse Verarbeitung sucht einen Weg von Rösselsprüngen in der 00022 * angegebenen Matrix. Dazu wird die Matrix übergeben, in der die 00023 * einzelnen Schritte gespeichert werden.<br> 00024 * Hier ist der Kernalgorithmus des Programms zu finden, der das 00025 * Problem löst. 00026 * 00027 * @version $Revision: 1.17 $ 00028 * @author Simon Tiffert 00029 */ 00030 public class Verarbeitung 00031 { 00032 /** Feld für Matrix */ 00033 private Matrix matrix; 00034 00035 /** 00036 * Der Konstruktor speichert die Matrix und ruft die Rösselsprünge 00037 * auf. Dabei wird abgefangen, ob die Rekursion erfolgreich war und 00038 * ein Weg gefunden wurde. 00039 * 00040 * @param matrix Zentrale Datenstruktur mit Matrix 00041 * @throws MatrixNotInitialisedException Matrix nicht initialisiert 00042 */ 00043 public Verarbeitung(Matrix matrix) 00044 throws MatrixNotInitialisedException 00045 { 00046 // zentrale Datenstruktur 00047 this.matrix = matrix; 00048 00049 // Überprüft, ob die Matrix initialisiert wurde. 00050 // Wenn die Verarbeitung als Modul eingebunden wird, könnte es 00051 // dort zu Problemen kommen 00052 if (!matrix.isInitialisiert()) 00053 { 00054 throw new MatrixNotInitialisedException(); 00055 } 00056 00057 // Rekursiver Aufruf des Kernalgorithmus, mit Überprüfung, ob ein 00058 // Weg gefunden wurde 00059 if (roesselSprung(1, 00060 matrix.getStartpunkt().getY(), 00061 matrix.getStartpunkt().getX())) 00062 { 00063 // markiere den Weg als gefunden 00064 matrix.setWegGefunden(); 00065 } 00066 } 00067 00068 /** 00069 * Diese Funktion führt das Backtracking durch. 00070 * Dabei wird über Rösselsprünge festgelegt, in welchen Richtungen 00071 * das nächste Feld gesucht wird. 00072 * 00073 * @param zaehler Rekursionstiefe sowie aktuelle Sprunganzahl 00074 * @param y y-Wert der aktuellen Position 00075 * @param x x-Wert der aktuellen Position 00076 * @return ob die Rekursion erfolgreich war 00077 */ 00078 private boolean roesselSprung(int zaehler, int y, int x) 00079 { 00080 // überprüfen, ob der aktuelle Punkt innerhalb der Matrix ist 00081 if (!matrix.isInMatrix(y, x)) 00082 { 00083 return false; 00084 } 00085 00086 // überprüfen, ob der aktuelle Punkt besetzt ist 00087 if (matrix.getWert(y, x) != 0) 00088 { 00089 return false; 00090 } 00091 00092 // setze auf die aktuelle Position den Wert von zaehler 00093 matrix.setWert(y, x, zaehler); 00094 00095 // wenn zaehler die Maximalanzahl erreicht hat, ist die Rekursion 00096 // fertig und kann mit true abgebrochen werden 00097 if (zaehler == matrix.getFeldAnzahl()) 00098 { 00099 return true; 00100 } 00101 00102 // Rekursionskern: 00103 00104 // Richtung NNO - Nordnordost 00105 if (roesselSprung(zaehler + 1, y - 2, x + 1)) 00106 { 00107 return true; 00108 } 00109 00110 // Richtung ONO - Ostnordost 00111 if (roesselSprung(zaehler + 1, y - 1, x + 2)) 00112 { 00113 return true; 00114 } 00115 00116 // Richtung OSO - Ostsüdost 00117 if (roesselSprung(zaehler + 1, y + 1, x + 2)) 00118 { 00119 return true; 00120 } 00121 00122 // Richtung SSO - Südsüdost 00123 if (roesselSprung(zaehler + 1, y + 2, x + 1)) 00124 { 00125 return true; 00126 } 00127 00128 // Richtung SSW - Südsüdwest 00129 if (roesselSprung(zaehler + 1, y + 2, x - 1)) 00130 { 00131 return true; 00132 } 00133 00134 // Richtung WSW - Westsüdwest 00135 if (roesselSprung(zaehler + 1, y + 1, x - 2)) 00136 { 00137 return true; 00138 } 00139 00140 // Richtung WNW - Westnordwest 00141 if (roesselSprung(zaehler + 1, y - 1, x - 2)) 00142 { 00143 return true; 00144 } 00145 00146 // Richtung NNW - Nordnordost 00147 if (roesselSprung(zaehler + 1, y - 2, x - 1)) 00148 { 00149 return true; 00150 } 00151 00152 // es wurde kein Weg gefunden, somit besetze die aktuelle Position 00153 // wieder mit 0, sodass das Feld wieder als freies Feld erkannt 00154 // wird. 00155 matrix.setWert(y, x, 0); 00156 00157 // Es wurde keine Richtung gefunden 00158 return false; 00159 } 00160 00161 }
|
|
|
| Documentation created with Doxygen 1.3.6 | Fri May 14 11:15:27 2004 |