001 package de.hska.info1.backtracking.labyrinth;
002
003 /**
004 * Wegsuche durch ein Labyrinth mit Backtracking.
005 *
006 * @author Christian Pape
007 */
008 public class Labyrinth {
009
010 private char [] [] labyrinth;
011
012 private int ausgangX;
013
014 private int ausgangY;
015
016 public Labyrinth(char [] [] labyrinth, int ausgangX, int ausgangY) {
017 this.labyrinth = labyrinth;
018 this.ausgangX = ausgangX;
019 this.ausgangY = ausgangY;
020 }
021
022 public boolean sucheAusgang(int x, int y) {
023 labyrinth[y][x] = '.';
024 if (! (ausgangX == x && ausgangY == y)) {
025 for (int i = 0; i < 4; i++) {
026 int neuesX = x;
027 int neuesY = y;
028 switch (i) {
029 case 0: neuesY = y - 1;
030 break;
031 case 1: neuesX = x + 1;
032 break;
033 case 2: neuesY = y + 1;
034 break;
035 case 3: neuesX = x - 1;
036 break;
037 }
038 if (isSchrittSinnvoll(neuesX, neuesY)) {
039 if (sucheAusgang(neuesX, neuesY)) {
040 return true;
041 } else {
042 labyrinth[neuesY][neuesX] = '-';
043 }
044 }
045 }
046 return false;
047 } else {
048 return true;
049 }
050 }
051
052 private boolean isSchrittSinnvoll(int neuesX, int neuesY) {
053 return 0 <= neuesY && neuesY < labyrinth.length
054 && 0 <= neuesX && neuesX < labyrinth[neuesY].length
055 && labyrinth[neuesY][neuesX] == ' ';
056 }
057
058 public void print() {
059 for (int y = 0; y < labyrinth.length; y++) {
060 for (int x = 0; x < labyrinth[y].length; x++) {
061 System.out.print( labyrinth[y][x]);
062 }
063 System.out.println();
064 }
065 }
066 }