Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.92 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool way(int curX, int curY, int x2, int y2, int n, int m, int pathPointer, int& steps, int path[], int was[][100], int labyrinth[][100]) { //cur is short for current
  5. if ((curX == x2) && (curY == y2)) { /*cout << "i got through with " << curX << " " << curY;*/ return true; }
  6. for (int i = 0; i < 4; i++) {
  7. switch (i){
  8. case 0: { //up
  9. if ((curY-1 >= 0) && (curY-1 < n) && (was[curX][curY-1] != 1) && (labyrinth[curX][curY-1] != 1)) {
  10. steps++; path[pathPointer++] = 0; was[curX][curY-1] = 1;
  11. if (way(curX, curY-1, x2, y2, n, m, pathPointer, steps, path, was, labyrinth) == true) { return true; }
  12. steps--; pathPointer--;
  13. }
  14. break;
  15. }
  16. case 1: { //right
  17. if ((curX+1 >= 0) && (curX+1 < m) && (was[curX][curY-1] != 1) && (labyrinth[curX+1][curY] != 1)) {
  18. steps++; path[pathPointer++] = 1; was[curX+1][curY] = 1;
  19. if (way(curX+1, curY, x2, y2, n, m, pathPointer, steps, path, was, labyrinth) == true) { return true; }
  20. steps--; pathPointer--;
  21. }
  22. break;
  23. }
  24. case 2: { //down
  25. if ((curY+1 >= 0) && (curY+1 < n) && (was[curX][curY+1] != 1) && (labyrinth[curX][curY+1] != 1)) {
  26. steps++; path[pathPointer++] = 2; was[curX][curY+1] = 1;
  27. if (way(curX, curY+1, x2, y2, n, m, pathPointer, steps, path, was, labyrinth) == true) { return true; }
  28. steps--; pathPointer--;
  29. }
  30. break;
  31. }
  32. case 3: { //left
  33. if ((curX-1 >= 0) && (curX-1 < m) && (was[curX][curY+1] != 1) && (labyrinth[curX-1][curY] != 1)) {
  34. steps++; path[pathPointer++] = 3; was[curX-1][curY] = 1;
  35. if (way(curX-1, curY, x2, y2, n, m, pathPointer, steps, path, was, labyrinth) == true) { return true; }
  36. steps--; pathPointer--;
  37. }
  38. break;
  39. }
  40. }
  41. }
  42. }
  43.  
  44. int main()
  45. {
  46. int n, m, x1, y1, x2, y2, labyrinth[100][100] = {}, path[100] = {}, steps = 0, was[100][100] = {}, pathPointer = 0;
  47. cout << "Enter X1 = "; cin >> x1;
  48. cout << "Enter Y1 = "; cin >> y1;
  49. cout << "Enter X2 = "; cin >> x2;
  50. cout << "Enter Y2 = "; cin >> y2;
  51. cout << "Enter N (height) = "; cin >> n;
  52. cout << "Enter M (length) = "; cin >> m;
  53. cout << "start entering the labyrinth now! 1 - blocked, 0 - free\n";
  54. cout << "Press space after each number, enter after each row for clarity and program stability\n";
  55. x1 -= 1; y1 -= 1; x2 -= 1; y2 -= 1;
  56. was[x1][y1] = 1;
  57. for (int i = 0; i < n; i++) {
  58. for (int j = 0; j < m; j++) {
  59. cin >> labyrinth[j][i];
  60. }
  61. }
  62. cout << endl;
  63. for (int i = 0; i < n; i++) {
  64. for (int j = 0; j < m; j++) {
  65. cout << was[j][i];
  66. }
  67. cout << endl;
  68. }
  69. if (way(x1, y1, x2, y2, n, m, pathPointer, steps, path, was, labyrinth) == true) {
  70. for (int i = 0; i < steps; i++) {
  71. switch (path[i]) {
  72. case 0: {
  73. cout << "up ";
  74. break;
  75. }
  76. case 1: {
  77. cout << "right ";
  78. break;
  79. }
  80. case 2: {
  81. cout << "down ";
  82. break;
  83. }
  84. case 3: {
  85. cout << "left ";
  86. break;
  87. }
  88. }
  89. }
  90. } else {
  91. cout << "No way found!";
  92. }
  93. cout << endl;
  94. for (int i = 0; i < n; i++) {
  95. for (int j = 0; j < m; j++) {
  96. cout << was[j][i];
  97. }
  98. cout << endl;
  99. }
  100. return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement