Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. // projekt.c -- Projekt -- Prechod bludiskom
  2. // Martin Sramek, 24.11.2016 10:36:33
  3.  
  4. #include <stdio.h>
  5.  
  6. int width;
  7. int height;
  8. int X;
  9. int Y;
  10. char ar[200][200];
  11.  
  12. // funkcia kontroluje či nenarazíme do steny
  13. int Stena(int *x, int *y)
  14. {
  15. return ar[*y][*x] == '#';
  16. }
  17.  
  18. // všetky smery posunov
  19. int Doprava(int *x, int *y)
  20. {
  21. // ak je číslo väčšie ako veľkosť pola alebo stena
  22. if(++(*x) >= width || Stena(x, y))
  23. {
  24. (*x)--;
  25. return 0; // nemôže sa pohnúť
  26. }
  27. return 1; // môže sa pohnúť
  28. }
  29.  
  30. int Dole(int *x, int *y)
  31. {
  32. if(++(*y) >= height || Stena(x, y))
  33. {
  34. (*y)--;
  35. return 0;
  36. }
  37. return 1;
  38. }
  39.  
  40. int Dolava(int *x, int *y)
  41. {
  42. if(--(*x) < 0 || Stena(x, y))
  43. {
  44. (*x)++;
  45. return 0;
  46. }
  47. return 1;
  48. }
  49.  
  50. int Hore(int *x, int *y)
  51. {
  52. if(--(*y) < 0 || Stena(x, y))
  53. {
  54. (*y)++;
  55. return 0;
  56. }
  57. return 1;
  58. }
  59.  
  60. // parametre pohybu sú súradnice v ktorých sa nachádzame smer z ktorého sme prišli
  61. // a koľkatý cyklus vykonávame
  62. int Pohyb(int x, int y, int smer, int cyklus)
  63. {
  64. // aby sme sa nezacyklili v nekonečnej slučke litmit je 200 pohybov
  65. if(cyklus > 200)
  66. return 0; // zabíja vetvu
  67.  
  68.  
  69. int i;
  70. int opacnysmer = (smer+2)%4;
  71.  
  72. switch(smer) // smery sú označené číslami 0-3
  73. {
  74. case 0:
  75. if(Doprava(&x, &y) == 0)
  76. return 0;
  77. break;
  78. case 1:
  79. if(Hore(&x, &y) == 0)
  80. return 0;
  81. break;
  82. case 2:
  83. if(Dolava(&x, &y) == 0)
  84. return 0;
  85. break;
  86. case 3:
  87. if(Dole(&x, &y) == 0)
  88. return 0;
  89. break;
  90. }
  91.  
  92. // políčko je voľné
  93.  
  94. // ak sme vo východe return 1
  95. if(x == width - 2 && y == height-1)
  96. {
  97. ar[y][x] = 'X';
  98. return 1;
  99. }
  100.  
  101. // inač vytvoriť vetvu do všetkých smerov okrem späť
  102. for(i=0; i<4; ++i)
  103. {
  104. // slúži na to aby sme nešli naspäť na políčko z ktorého sme došli
  105. if(i != opacnysmer)
  106. {
  107. if(Pohyb(x, y, i, cyklus+1))
  108. {
  109. ar[y][x] = 'o'; // vykreslí "o" v rekurzii ktorá vrátila 1
  110. switch(smer)
  111. {
  112. case 0:
  113. Dolava(&x, &y);
  114. break;
  115. case 1:
  116. Dole(&x, &y);
  117. break;
  118. case 2:
  119. Doprava(&x, &y);
  120. break;
  121. case 3:
  122. Hore(&x, &y);
  123. break;
  124. }
  125.  
  126. return 1;
  127. }
  128. }
  129. }
  130. return 0;
  131. }
  132.  
  133. int main()
  134. {
  135. while(1)
  136. {
  137. // načítame bludisko
  138. for(Y=0; Y<200; ++Y) //max 200x200
  139. {
  140. scanf("%s",ar[Y]);
  141. // načíta až kým nemá nenájde znak "-" alebo kým neskončia bludiská...
  142. if(ar[Y][0] == '-' || ar[Y][0] == '\0')
  143. break;
  144. }
  145.  
  146. height = width = Y;
  147.  
  148. // hladáme cestu z bodu 1, 0
  149. if(Pohyb(1,-1,3,0) == 0)
  150. printf("NEJDE:\n");
  151.  
  152. // vykreslíme bludisko
  153. for(Y=0; Y<height; ++Y)
  154. {
  155. printf("%s",ar[Y]);
  156. printf("\n");
  157. }
  158.  
  159. printf("--------\n");
  160.  
  161. // ak nemá čo načítať skončí
  162. if(ar[Y][0] == '\0')
  163. break;
  164. }
  165.  
  166. return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement