| Generierte Dokumentation der praktischen Arbeit von Simon Tiffert |

Dazu wird die Matrix übergeben, in der die einzelnen Schritte gespeichert werden.
Hier ist der Kernalgorithmus des Programms zu finden, der das Problem löst.
Definiert in Zeile 30 der Datei Verarbeitung.java.
Öffentliche Methoden | |
| Verarbeitung (Matrix matrix) throws MatrixNotInitialisedException | |
| Der Konstruktor speichert die Matrix und ruft die Rösselsprünge auf. | |
Private Methoden | |
| boolean | roesselSprung (int zaehler, int y, int x) |
| Diese Funktion führt das Backtracking durch. | |
Private Attribute | |
| Matrix | matrix |
| Feld für Matrix. | |
|
|
Der Konstruktor speichert die Matrix und ruft die Rösselsprünge auf. Dabei wird abgefangen, ob die Rekursion erfolgreich war und ein Weg gefunden wurde.
Definiert in Zeile 43 der Datei Verarbeitung.java. Benutzt main.verarbeitung.Matrix.getStartpunkt(), main.verarbeitung.Punkt.getX(), main.verarbeitung.Punkt.getY(), main.verarbeitung.Matrix.isInitialisiert, main.verarbeitung.Verarbeitung.roesselSprung() und main.verarbeitung.Matrix.setWegGefunden().
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 }
|
Hier ist der Graph aller Aufrufe für diese Funktion:

|
||||||||||||||||
|
Diese Funktion führt das Backtracking durch. Dabei wird über Rösselsprünge festgelegt, in welchen Richtungen das nächste Feld gesucht wird.
Definiert in Zeile 78 der Datei Verarbeitung.java. Benutzt main.verarbeitung.Matrix.getFeldAnzahl(), main.verarbeitung.Matrix.getWert(), main.verarbeitung.Matrix.isInMatrix() und main.verarbeitung.Matrix.setWert(). Wird benutzt von main.verarbeitung.Verarbeitung.Verarbeitung().
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 }
|
Hier ist der Graph aller Aufrufe für diese Funktion:

|
|
Feld für Matrix.
Definiert in Zeile 33 der Datei Verarbeitung.java. |
|
|
|
| Documentation created with Doxygen 1.3.6 | Fri May 14 11:16:00 2004 |