Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.22 KB | None | 0 0
  1. package labyrinth;
  2.  
  3. import java.util.LinkedList;
  4. import java.util.Stack;
  5.  
  6. import sun.misc.Queue;
  7.  
  8. public class Suche {
  9.  
  10. LabyrinthLoader loader;
  11. MyCell[][] labyrinth;
  12. MyCell start;
  13.  
  14. public Suche() {
  15. loader = new LabyrinthLoader();
  16. labyrinth = loader.getLabyrinth();
  17. start = loader.getStart();
  18. Tiefensuchen2(start);
  19. }
  20.  
  21. /*
  22. * Erläuterungen: Das Labyrinth ist ein zweidimensionales Array bestehend aus
  23. * Zellen der Klasse MyCell. Von der Klasse MyCell können z.B. folgende Methoden
  24. * verwendet werden: istWandOben() : liefert true zurück, wenn der Weg nach oben
  25. * versperrt ist istWandLinks() : liefert true zurück, wenn der Weg nach links
  26. * versperrt ist istBesucht() : liefert true zurück, wenn die Zelle bereits
  27. * besucht wurde setBesucht() : markiert die aktuelle Zelle als besucht
  28. * istZiel() : liefert true zurück, wenn die aktuelle Zelle das Ziel ist getX()
  29. * : liefert die x-Koordinate der aktuellen Zelle im Labyrinth zurück gety() :
  30. * liefert die y-Koordinate der aktuellen Zelle im Labyrinth zurück getPos() :
  31. * liefert die Position (x- und y-Koordinate)der aktuellen Zelle im Labyrinth
  32. * zurück (siehe Klasse Position)
  33. *
  34. */
  35.  
  36. /*
  37. * Hilfe zur Breitensuche:
  38. *
  39. * Zur Breitensuche ist eine Warteschlange (Queue) hilfreich In Java gibt es
  40. * hierfür z.B. die vorbereitete Klasse Queue
  41. *
  42. * ES KANN ABER AUCH DIE KLASSE LINKEDLIST als Queue benutzt werden:
  43. *
  44. * Einige Methoden der Klasse LinkedList:
  45. *
  46. * offer(<Element>) oder auch add(<Element>): fügt ein neues Element an das Ende
  47. * der Liste an poll() : liefert das erste Element in der Liste zurück und
  48. * löscht es aus der Liste isEmpty() : liefert true zurück, wenn die Liste leer
  49. * ist
  50. *
  51. */
  52.  
  53. public void suchen() {
  54. LinkedList<MyCell> q = new LinkedList<MyCell>();
  55. q.add(start);
  56.  
  57. while (!q.isEmpty()) {
  58. MyCell b= q.poll();
  59. if(b.istZiel()) {
  60. return;
  61. }
  62. b.setBesucht();
  63.  
  64. if (b.istWandOben() == false && b.getY()-1>= 0 && labyrinth[b.getX()][b.getY() - 1].istBesucht() == false ) {
  65. q.add(labyrinth[b.getX()][b.getY() - 1]);
  66. }
  67. if (b.istWandRechts() == false && b.getX()+1<= labyrinth.length && labyrinth[b.getX() + 1][b.getY()].istBesucht() == false) {
  68. q.add(labyrinth[b.getX() + 1][b.getY()]);
  69. }
  70. if (b.istWandUnten() == false && b.getY()+1<= labyrinth.length && labyrinth[b.getX()][b.getY() + 1].istBesucht() == false) {
  71. q.add(labyrinth[b.getX()][b.getY() + 1]);
  72. }
  73. if (b.istWandLinks() == false && b.getX()-1>= 0 && labyrinth[b.getX() - 1][b.getY()].istBesucht() == false) {
  74. q.add(labyrinth[b.getX() - 1][b.getY()]);
  75. }
  76. try {
  77. Thread.sleep(25);
  78. } catch (InterruptedException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. }
  82.  
  83.  
  84. }
  85.  
  86. }
  87. public void Tiefensuchen() {
  88. Stack<MyCell> q = new Stack<MyCell>();
  89. q.add(start);
  90.  
  91. while (!q.isEmpty()) {
  92. MyCell b= q.pop();
  93. if(b.istZiel()) {
  94. return;
  95. }
  96. b.setBesucht();
  97.  
  98. if (b.istWandOben() == false && b.getY()-1>= 0 && labyrinth[b.getX()][b.getY() - 1].istBesucht() == false ) {
  99. q.push(labyrinth[b.getX()][b.getY() - 1]);
  100. }
  101. if (b.istWandRechts() == false && b.getX()+1<= labyrinth.length && labyrinth[b.getX() + 1][b.getY()].istBesucht() == false) {
  102. q.push(labyrinth[b.getX() + 1][b.getY()]);
  103. }
  104. if (b.istWandUnten() == false && b.getY()+1<= labyrinth.length && labyrinth[b.getX()][b.getY() + 1].istBesucht() == false) {
  105. q.push(labyrinth[b.getX()][b.getY() + 1]);
  106. }
  107. if (b.istWandLinks() == false && b.getX()-1>= 0 && labyrinth[b.getX() - 1][b.getY()].istBesucht() == false) {
  108. q.push(labyrinth[b.getX() - 1][b.getY()]);
  109. }
  110. try {
  111. Thread.sleep(25);
  112. } catch (InterruptedException e) {
  113. // TODO Auto-generated catch block
  114. e.printStackTrace();
  115. }
  116.  
  117.  
  118. }
  119.  
  120. }
  121. public void Tiefensuchen2(MyCell b) {
  122. LinkedList<MyCell> q = new LinkedList<MyCell>();
  123. q.add(b);
  124. while (!b.istZiel()) {
  125.  
  126.  
  127. b.setBesucht();
  128.  
  129. if (b.istWandOben() == false && b.getY()-1>= 0 && labyrinth[b.getX()][b.getY() - 1].istBesucht() == false ) {
  130. q.add(labyrinth[b.getX()][b.getY() - 1]);
  131. this.Tiefensuchen2(labyrinth[b.getX()][b.getY() - 1]);
  132. }
  133. else if (b.istWandRechts() == false && b.getX()+1<= labyrinth.length && labyrinth[b.getX() + 1][b.getY()].istBesucht() == false) {
  134. q.add(labyrinth[b.getX() + 1][b.getY()]);
  135. this.Tiefensuchen2(labyrinth[b.getX() + 1][b.getY()]);
  136. }
  137. else if (b.istWandUnten() == false && b.getY()+1<= labyrinth.length && labyrinth[b.getX()][b.getY() + 1].istBesucht() == false) {
  138. q.add(labyrinth[b.getX()][b.getY() + 1]);
  139. this.Tiefensuchen2(labyrinth[b.getX()][b.getY() + 1]);
  140. }
  141. else if (b.istWandLinks() == false && b.getX()-1>= 0 && labyrinth[b.getX() - 1][b.getY()].istBesucht() == false) {
  142. q.add(labyrinth[b.getX() - 1][b.getY()]);
  143. this.Tiefensuchen2(labyrinth[b.getX() - 1][b.getY()]);
  144. }
  145. else {
  146. q.poll().Tiefensuchen2(b);
  147. }
  148. try {
  149. Thread.sleep(25);
  150. } catch (InterruptedException e) {
  151. // TODO Auto-generated catch block
  152. e.printStackTrace();
  153. }
  154.  
  155.  
  156. }
  157. return;
  158.  
  159. }
  160.  
  161.  
  162.  
  163. public static void main(String[] args) {
  164. new Suche();
  165.  
  166. }
  167.  
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement