Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4.  
  5. #define W 5
  6. #define H 5
  7.  
  8. typedef struct p{
  9. char type;
  10. int x;
  11. int y;
  12. float distance;
  13. }Point;
  14.  
  15. int square (int);
  16. float root(double);
  17. float distance(int, int, int, int);
  18.  
  19. int main() {
  20.  
  21. Point grid[W][H];
  22.  
  23. for (int i = 0; i < W; ++i) {
  24. for (int j = 0; j < H; ++j) {
  25. grid[i][j].type = 'x';
  26. grid[i][j].x = i;
  27. grid[i][j].y = j;
  28. }
  29. }
  30.  
  31. Point start, end;
  32.  
  33. srand(time(0));
  34.  
  35. start.x = rand() % (4) + 1;
  36. start.y = rand() % (4) + 1;
  37. start.type = 's';
  38. end.x = rand() % (4) + 1;
  39. end.y = rand() % (4) + 1;
  40. end.type = 'e';
  41.  
  42. grid[start.x][start.y] = start;
  43. grid[end.x][end.y] = end;
  44.  
  45. float final_distance;
  46. float shortest_distance;
  47. Point nearest_point;
  48. Point reference_point = start;
  49.  
  50. final_distance = distance(start.x, start.y, end.x, end.y);
  51.  
  52. do{
  53. int x = reference_point.x;
  54. int y = reference_point.y;
  55.  
  56. for (int i = -1; i < 1; i++) {
  57. for (int j = -1; j < 1; j++) {
  58. if(grid[x+i][y+i].type == 'e'){
  59. printf("Finished!\n");
  60. final_distance = 1;
  61. }
  62. }
  63. }
  64. if(final_distance != 1){
  65. shortest_distance = distance(reference_point.x, reference_point.y, end.x, end.y);
  66. for (int i = -1; i < 1; i++) {
  67. for (int j = -1; j < 1; j++) {
  68. grid[x+i][y+j].distance = distance(grid[x+i][y+j].x, grid[x+i][y+j].y, end.x, end.y);
  69. if (grid[x+i][y+j].distance < shortest_distance) {
  70. shortest_distance = grid[x+i][y+j].distance;
  71. nearest_point = grid[x+i][y+j];
  72. }
  73. }
  74. }
  75. reference_point = nearest_point;
  76. grid[reference_point.x][reference_point.y].type = 'o';
  77. }
  78.  
  79. }while(final_distance != 1);
  80.  
  81. for (int k = 0; k < H; k++) {
  82. for (int i = 0; i < W; i++) {
  83. printf("%c ", grid[k][i].type);
  84. }
  85. printf("\n");
  86. }
  87.  
  88.  
  89. return 0;
  90. }
  91.  
  92. int square(int x){
  93. return x*x;
  94. }
  95. float root(double x){
  96. return sqrt((double)x);
  97. }
  98. float distance(int x1, int y1, int x2, int y2){
  99. return root(square(x1-x2) + square(y1-y2));
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement