Changeset 396 in Java_Quellcode_SOOP_Vorlesung
- Timestamp:
- Dec 4, 2017, 9:21:38 PM (7 years ago)
- Files:
-
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
arrays/ArraysVL.java
r390 r396 1 1 package eu.hsrw.tr.prog.vl.arrays; 2 2 3 public class Arrays { 3 import java.util.Arrays; 4 5 public class ArraysVL { 4 6 5 7 public static void main(String[] args) { … … 55 57 } 56 58 59 // Alternativ: 60 Arrays.fill(prim, true); 61 57 62 // Vielfache der Primzahlen streichen, beginne bei 2 58 63 for (int i = 2; i < prim.length; i++) { -
rekursion/Rekursion.java
r188 r396 29 29 * Berechnet rekursiv n! 30 30 * @param n n 31 * @return 31 * @return n! 32 32 */ 33 33 public static int fakultaet(int n) { … … 41 41 * Berechnet rekursiv 2^n 42 42 * @param n n 43 * @return 43 * @return 2^n 44 44 */ 45 45 public static int zweihoch(int n) { -
rekursion/SudokuSolverRekursiv.java
r245 r396 44 44 } 45 45 46 private static int aufrufe = 0; 47 46 48 /** 47 49 * Löst das übergebene 9x9 Sudoku mittels Brute Force und Backtracking: Es 48 * wird mit dem Feld oben links begonnen und dann spalten- und zeilenweise50 * wird mit dem Feld oben links begonnen und dann rekursiv spalten- und zeilenweise 49 51 * nach rechts unten gearbeitet. Als erster Wert wird die 1 versucht. Falls 50 52 * der Versuch einen Konflikt auslöst, wird die Zahl immer weiter erhöht, 51 * bis entweder kein Konflikt mehr auftritt oder die Zahl 10 erreicht wurde.52 * Falls 10 erreicht wurde konnte kein passender Eintrag gefunden werden,53 * das Problem muss also schon weiter vorn liegen. Es wird um ein Feld54 * zurückgegangen und dort die nächsthöhere Zahl versucht. Ggf. sind sehr55 * viele Rücksprünge erforderlich, da viele Kombinationen durchprobiert56 * werden müssen.53 * bis entweder kein Konflikt mehr auftritt oder die Zahl 9 überschritten 54 * wurde. Falls 9 überschritten wurde, konnte kein passender Eintrag 55 * gefunden werden, das Problem muss also schon weiter vorn liegen. Es wird 56 * um ein Feld zurückgegangen und dort die nächsthöhere Zahl versucht. Ggf. 57 * sind sehr viele Rücksprünge erforderlich, da viele Kombinationen 58 * durchprobiert werden müssen. 57 59 * 58 60 * @param a 59 61 * zu lösendes Sudoku als 9x9 Array 62 * @param position 63 * Index des aktuellen Feldes 64 * 65 * @return Indikator, ob eine gültige Einfügung in das Feld gefunden wurde. 66 * 60 67 */ 61 public static boolean solve(int[][] a, int feld) { 68 public static boolean solve(int[][] a, int position) { 69 aufrufe++; 70 62 71 // sind wir fertig? 63 if ( feld== 81) {72 if (position == 81) { 64 73 return true; 65 74 } 66 67 int zeile = feld / 9; 68 int spalte = feld % 9; 69 70 // ist das Feld vorbelegt? 75 76 // Zeile und Spalte aus dem Index der aktuellen Position berechnen 77 int zeile = position / 9; 78 int spalte = position % 9; 79 80 // ist das Feld an der aktuellen Position vorbelegt? 71 81 if (a[zeile][spalte] != 0) { 72 return solve(a, feld + 1); 82 // gehe zum nächsten Feld 83 return solve(a, position + 1); 73 84 } 74 75 // Zahl testen 85 86 // Zahlen von 1 bis 9 testen: Konnte eingefügt werden, wird rekursiv die 87 // nächste Position angesprungen 76 88 for (int kandidat = 1; kandidat <= 9; kandidat++) { 77 89 if (kandidatOK(a, zeile, spalte, kandidat)) { 90 // Zahl an Position einfügen 78 91 a[zeile][spalte] = kandidat; 79 if (solve(a, feld + 1)) { 92 // Rekursiver Aufruf mit nächster Position 93 if (solve(a, position + 1)) { 94 // Wir geben ein erhaltenes true weiter nach oben 80 95 return true; 81 96 } 82 } 97 } 83 98 } 84 85 // keine Zahl hat gepasst 86 // aktuelle Zelle nullen und zurückspringen 99 100 // keine Zahl hat gepasst: Feld an der aktuellen Position nullen und 101 // zurückspringen. 102 // Durch den rekursiven Aufruf dieser Methode kehrt return einen Schritt 103 // nach oben zurück. Dort war die Position noch um 1 kleiner, es wird 104 // also nach vorn gegeangen. 87 105 a[zeile][spalte] = 0; 88 106 return false; … … 150 168 151 169 solve(sudoku, 0); 170 171 printSudoku(sudoku); 152 172 153 printSudoku(sudoku);173 System.out.println("Aufrufe: " + aufrufe); 154 174 } 155 175 }
Note: See TracChangeset
for help on using the changeset viewer.