Guest User

Untitled

a guest
Nov 24th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.54 KB | None | 0 0
  1. PImage b;
  2. PFont font;
  3. int x, y;
  4. Knoten [] knoten = new Knoten[ 100 ];
  5. Knoten ausgangsknoten;
  6. Knoten ziel;
  7. int zaehler=0;
  8. Knoten startKnoten;
  9. // Strings?
  10.  
  11. void setup(){
  12. size( 634, 759 );
  13. b = loadImage("Lageplan.gif");
  14. initialisiere();
  15. }
  16.  
  17. void mouseClicked(){
  18. if(ausgangsknoten == null){
  19. ausgangsknoten = findeNaechstenKnoten();
  20. ausgangsknoten.markierePunkt();
  21. }
  22. else {
  23. if (ziel == null){
  24. ziel = findeNaechstenKnoten();
  25. ziel.markierePunkt();
  26. }
  27. suchePfad();
  28. }
  29. }
  30.  
  31. public Knoten findeNaechstenKnoten(){
  32. int zaehler = 2;
  33. Knoten naechsterKnoten = knoten[1];
  34. while(zaehler < knoten.length && knoten[zaehler]!= null){
  35. if(knoten[zaehler].berechneMausDistanz(mouseX, mouseY) < naechsterKnoten.berechneMausDistanz(mouseX, mouseY)){
  36. naechsterKnoten = knoten[zaehler];
  37. }
  38. zaehler++;
  39. }
  40. return naechsterKnoten;
  41. }
  42.  
  43. void draw(){
  44. image(b,0,0);
  45.  
  46. int zaehler = 1;
  47. while( zaehler < 19){
  48. knoten[zaehler].zeichneDich();
  49. zaehler++;
  50. }
  51. }
  52.  
  53. void initialisiere(){
  54. knoten[ 1 ] = new Knoten( "A", 257, 18 );
  55. knoten[ 2 ] = new Knoten( "B", 297, 229 );
  56. knoten[ 3 ] = new Knoten( "C", 93, 151 );
  57. knoten[ 4 ] = new Knoten( "D", 504, 55 );
  58. knoten[ 5 ] = new Knoten( "E", 515, 677 );
  59. knoten[ 6 ] = new Knoten( "F", 301, 629 );
  60. knoten[ 7 ] = new Knoten( "G", 548, 447 );
  61. knoten[ 8 ] = new Knoten( "H", 328, 374 );
  62. knoten[ 9 ] = new Knoten( "I", 22, 290 );
  63. knoten[ 10 ] = new Knoten( "K", 389, 529 );
  64. knoten[ 11 ] = new Knoten( "L", 603, 234 );
  65. knoten[ 12 ] = new Knoten( "M", 25, 42 );
  66. knoten[ 13 ] = new Knoten( "N", 359, 110 );
  67. knoten[ 14 ] = new Knoten( "O", 200,726 );
  68. knoten[ 15 ] = new Knoten( "P", 250,445 );
  69. knoten[ 16 ] = new Knoten( "X", 207, 133 );
  70. knoten[ 17 ] = new Knoten( "Y", 430, 407 );
  71. knoten[ 18 ] = new Knoten( "Z", 430, 233 );
  72.  
  73. knoten[ 1 ].fuegeKanteHinzu( knoten[ 2 ], 69 );
  74. knoten[ 1 ].fuegeKanteHinzu( knoten[ 4 ], 36 );
  75. knoten[ 1 ].fuegeKanteHinzu( knoten[ 12 ], 36 );
  76. knoten[ 1 ].fuegeKanteHinzu( knoten[ 13 ], 22 );
  77.  
  78. knoten[ 2 ].fuegeKanteHinzu( knoten[ 4 ], 64 );
  79. knoten[ 2 ].fuegeKanteHinzu( knoten[ 8 ], 30 );
  80. knoten[ 2 ].fuegeKanteHinzu( knoten[ 9 ], 34 );
  81. knoten[ 2 ].fuegeKanteHinzu( knoten[ 16 ], 26 );
  82. knoten[ 2 ].fuegeKanteHinzu( knoten[ 18 ], 32 );
  83.  
  84. knoten[ 3 ].fuegeKanteHinzu( knoten[ 9 ], 40 );
  85. knoten[ 3 ].fuegeKanteHinzu( knoten[ 12 ], 31 );
  86. knoten[ 3 ].fuegeKanteHinzu( knoten[ 16 ], 23 );
  87.  
  88. knoten[ 4 ].fuegeKanteHinzu( knoten[ 11 ], 95 );
  89. knoten[ 4 ].fuegeKanteHinzu( knoten[ 13 ], 20 );
  90.  
  91. knoten[ 5 ].fuegeKanteHinzu( knoten[ 6 ], 79 );
  92. knoten[ 5 ].fuegeKanteHinzu( knoten[ 7 ], 60 );
  93. knoten[ 5 ].fuegeKanteHinzu( knoten[ 10 ], 31 );
  94. knoten[ 5 ].fuegeKanteHinzu( knoten[ 14 ], 102 );
  95.  
  96. knoten[ 6 ].fuegeKanteHinzu( knoten[ 10 ], 29 );
  97. knoten[ 6 ].fuegeKanteHinzu( knoten[ 14 ], 14 );
  98. knoten[ 6 ].fuegeKanteHinzu( knoten[ 15 ], 57 );
  99.  
  100. knoten[ 7 ].fuegeKanteHinzu( knoten[ 10 ], 58 );
  101. knoten[ 7 ].fuegeKanteHinzu( knoten[ 11 ], 58 );
  102. knoten[ 7 ].fuegeKanteHinzu( knoten[ 17 ], 30 );
  103.  
  104. // H
  105. knoten[ 8 ].fuegeKanteHinzu( knoten[ 9 ], 65 );
  106. knoten[ 8 ].fuegeKanteHinzu( knoten[ 10 ], 31 );
  107. knoten[ 8 ].fuegeKanteHinzu( knoten[ 11 ], 106 );
  108. knoten[ 8 ].fuegeKanteHinzu( knoten[ 15 ], 34 );
  109. knoten[ 8 ].fuegeKanteHinzu( knoten[ 17 ], 29 );
  110.  
  111. // I
  112. knoten[ 9 ].fuegeKanteHinzu( knoten[ 12 ], 43 );
  113. knoten[ 9 ].fuegeKanteHinzu( knoten[ 15 ], 55 );
  114.  
  115. // K
  116. knoten[ 10 ].fuegeKanteHinzu( knoten[ 15 ], 25 );
  117. knoten[ 10 ].fuegeKanteHinzu( knoten[ 17 ], 20 );
  118.  
  119. // L
  120. knoten[ 11 ].fuegeKanteHinzu( knoten[ 18 ], 40 );
  121.  
  122. // M
  123. knoten[ 12 ].fuegeKanteHinzu( knoten[ 16 ], 12 );
  124.  
  125. // N
  126. knoten[ 13 ].fuegeKanteHinzu( knoten[ 16 ], 29 );
  127. knoten[ 13 ].fuegeKanteHinzu( knoten[ 18 ], 30 );
  128.  
  129. // O
  130. knoten[ 14 ].fuegeKanteHinzu( knoten[ 15 ], 91 );
  131.  
  132. //Y
  133. knoten[ 17 ].fuegeKanteHinzu( knoten[ 18 ], 23 );
  134.  
  135. // Zurueck
  136. knoten[ 2 ].fuegeKanteHinzu( knoten[ 1 ], 69 );
  137. knoten[ 4 ].fuegeKanteHinzu( knoten[ 1 ], 36 );
  138. knoten[ 12 ].fuegeKanteHinzu( knoten[ 1 ], 36 );
  139. knoten[ 13 ].fuegeKanteHinzu( knoten[ 1 ], 22 );
  140.  
  141. // B
  142. knoten[ 4 ].fuegeKanteHinzu( knoten[ 2 ], 64 );
  143. knoten[ 8 ].fuegeKanteHinzu( knoten[ 2 ], 30 );
  144. knoten[ 9 ].fuegeKanteHinzu( knoten[ 2 ], 34 );
  145. knoten[ 16 ].fuegeKanteHinzu( knoten[ 2 ], 26 );
  146. knoten[ 18 ].fuegeKanteHinzu( knoten[ 2 ], 32 );
  147.  
  148. //C
  149. knoten[ 9 ].fuegeKanteHinzu( knoten[ 3 ], 40 );
  150. knoten[ 12 ].fuegeKanteHinzu( knoten[ 3 ], 31 );
  151. knoten[ 16 ].fuegeKanteHinzu( knoten[ 3 ], 23 );
  152.  
  153. // D
  154. knoten[ 11 ].fuegeKanteHinzu( knoten[ 4 ], 95 );
  155. knoten[ 13 ].fuegeKanteHinzu( knoten[ 4 ], 20 );
  156.  
  157. // E
  158. knoten[ 6 ].fuegeKanteHinzu( knoten[ 5 ], 79 );
  159. knoten[ 7 ].fuegeKanteHinzu( knoten[ 5 ], 60 );
  160. knoten[ 10 ].fuegeKanteHinzu( knoten[ 5 ], 31 );
  161. knoten[ 14 ].fuegeKanteHinzu( knoten[ 5 ], 102 );
  162.  
  163. // F
  164. knoten[ 10 ].fuegeKanteHinzu( knoten[ 6 ], 29 );
  165. knoten[ 14 ].fuegeKanteHinzu( knoten[ 6 ], 14 );
  166. knoten[ 15 ].fuegeKanteHinzu( knoten[ 6 ], 57 );
  167.  
  168. // G
  169. knoten[ 10 ].fuegeKanteHinzu( knoten[ 7 ], 58 );
  170. knoten[ 11 ].fuegeKanteHinzu( knoten[ 7 ], 58 );
  171. knoten[ 17 ].fuegeKanteHinzu( knoten[ 7 ], 30 );
  172.  
  173. // H
  174. knoten[ 9 ].fuegeKanteHinzu( knoten[ 8 ], 65 );
  175. knoten[ 10 ].fuegeKanteHinzu( knoten[ 8 ], 31 );
  176. knoten[ 11 ].fuegeKanteHinzu( knoten[ 8 ], 106 );
  177. knoten[ 15 ].fuegeKanteHinzu( knoten[ 8 ], 34 );
  178. knoten[ 17 ].fuegeKanteHinzu( knoten[ 8 ], 29 );
  179.  
  180. // I
  181. knoten[ 12 ].fuegeKanteHinzu( knoten[ 9 ], 43 );
  182. knoten[ 15 ].fuegeKanteHinzu( knoten[ 9 ], 55 );
  183.  
  184. // K
  185. knoten[ 15 ].fuegeKanteHinzu( knoten[ 10 ], 25 );
  186. knoten[ 17 ].fuegeKanteHinzu( knoten[ 10 ], 20 );
  187.  
  188. // L
  189. knoten[ 18 ].fuegeKanteHinzu( knoten[ 11 ], 40 );
  190.  
  191. // M
  192. knoten[ 16 ].fuegeKanteHinzu( knoten[ 12 ], 12 );
  193.  
  194. // N
  195. knoten[ 16 ].fuegeKanteHinzu( knoten[ 13 ], 29 );
  196. knoten[ 18 ].fuegeKanteHinzu( knoten[ 13 ], 30 );
  197.  
  198. // O
  199. knoten[ 15 ].fuegeKanteHinzu( knoten[ 14 ], 91 );
  200.  
  201. //Y
  202. knoten[ 18 ].fuegeKanteHinzu( knoten[ 17 ], 23 );
  203.  
  204.  
  205. //ausgangsknoten= knoten[ 9 ];
  206. //ziel = knoten[ 14 ];
  207. }
  208.  
  209. void suchePfad(){
  210. println( "Start: " + ausgangsknoten.name + " Ziel: " + ziel.name );
  211.  
  212. Warteschlange ws = new Warteschlange();
  213. ws.fuegeKnotenEin(ausgangsknoten);
  214.  
  215. while(ws.gibErstesElementZurueck()!=ziel){
  216. Knoten bearbeiten = ws.gibErstesElementZurueck();
  217. bearbeiten.markiereKnoten();
  218. ws.entferneKnoten(bearbeiten);
  219.  
  220. Kante [] aktuelleKanten = bearbeiten.kanten;
  221.  
  222. int zaehler = 0;
  223. while( zaehler < aktuelleKanten.length && aktuelleKanten[zaehler] != null){
  224. Knoten aktuellerKnoten = aktuelleKanten[zaehler].nachbar; // Knoten werden als Nachbarn hinzugefuegt
  225. if(aktuellerKnoten.istMarkiert() == false){
  226. if(aktuellerKnoten.gibEntfernungZurueck() > bearbeiten.gibEntfernungZurueck() + aktuelleKanten[zaehler].entfernung || aktuellerKnoten.gibEntfernungZurueck() == 0){
  227. aktuellerKnoten.entfernung = bearbeiten.gibEntfernungZurueck() + aktuelleKanten[zaehler].entfernung;
  228. aktuellerKnoten.vorgaengerImPfad = bearbeiten;
  229. }
  230. ws.entferneKnoten(aktuellerKnoten);
  231. ws.fuegeKnotenEin(aktuellerKnoten);
  232. }
  233. zaehler++;
  234. }
  235. }
  236.  
  237.  
  238. if( ws.gibErstesElementZurueck() == ziel ){
  239. println( "Der kuerzeste Weg ist:" );
  240. ziel.gibPfadAus();
  241. }
  242. }
Add Comment
Please, Sign In to add comment