Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. struct Route
  8. {
  9. string r;
  10. bool visited;
  11.  
  12. Route()
  13. {
  14. r = "";
  15. visited = false;
  16. }
  17. };
  18.  
  19. string convertToCell(int x, int y)
  20. {
  21. string s;
  22. s += (char)(y + 'A');
  23. s += (char)(x + '0' + 1);
  24. return s;
  25. }
  26.  
  27. void findRoutes(Route** field, int x, int y, string path)
  28. {
  29. field[x][y].visited = true;
  30. field[x][y].r = path;
  31.  
  32. if (y <= 6 && x >= 2 && (!field[x - 2][y + 1].visited || field[x - 2][y + 1].r.size() > path.size()) )
  33. {
  34. findRoutes(field, x - 2, y + 1, path + "1");
  35. }
  36.  
  37. if (y <= 5 && x >= 1 && (!field[x - 1][y + 2].visited || field[x - 1][y + 2].r.size() > path.size()))
  38. {
  39. findRoutes(field, x - 1, y + 2, path + "2");
  40. }
  41.  
  42. if (y <= 5 && x <= 6 && (!field[x + 1][y + 2].visited || field[x + 1][y + 2].r.size() > path.size()))
  43. {
  44. findRoutes(field, x + 1, y + 2, path + "3");
  45. }
  46.  
  47. if (y <= 6 && x <= 2 && (!field[x + 2][y + 1].visited || field[x + 2][y + 1].r.size() > path.size()))
  48. {
  49. findRoutes(field, x + 2, y + 1, path + "4");
  50. }
  51.  
  52. if (y >= 1 && x >= 2 && (!field[x - 2][y - 1].visited || field[x - 2][y - 1].r.size() > path.size()))
  53. {
  54. findRoutes(field, x - 2, y - 1, path + "5");
  55. }
  56.  
  57. if (y >= 2 && x >= 1 && (!field[x - 1][y - 2].visited || field[x - 1][y - 2].r.size() > path.size()))
  58. {
  59. findRoutes(field, x - 1, y - 2, path + "6");
  60. }
  61.  
  62. if (y >= 1 && x <= 5 && (!field[x + 2][y - 1].visited || field[x + 2][y - 1].r.size() > path.size()))
  63. {
  64. findRoutes(field, x + 2, y - 1, path + "7");
  65. }
  66.  
  67. if (y >= 2 && x <= 6 && (!field[x + 1][y - 2].visited || field[x + 1][y - 2].r.size() > path.size()))
  68. {
  69. findRoutes(field, x + 1, y - 2, path + "8");
  70. }
  71.  
  72. }
  73.  
  74.  
  75. int main()
  76. {
  77. setlocale(LC_ALL, "russian");
  78. cout << "Введите исходную клетку" << endl;
  79. string s;
  80. cin >> s;
  81.  
  82. pair<int, int> start = {s[1] - '0' - 1 , s[0] - 'A' };
  83.  
  84. cout << "Введите конечную клетку" << endl;
  85.  
  86. cin >> s;
  87.  
  88. pair<int, int> finish = { s[1] - '0' - 1 , s[0] - 'A' };
  89.  
  90. Route** field = new Route*[8];
  91. for (int i = 0; i < 8; i++)
  92. {
  93. field[i] = new Route[8];
  94. }
  95.  
  96. findRoutes(field, start.first, start.second, "");
  97.  
  98.  
  99. cout <<"Количество ходов в полученном пути: "<< field[finish.first][finish.second].r.size() << endl;
  100.  
  101. Route result = field[finish.first][finish.second];
  102.  
  103. int x = start.first;
  104. int y = start.second;
  105. cout << "Путь:\n" << convertToCell(x, y) << " ";
  106. for (int i = 0; i < result.r.size() - 1; i++)
  107. {
  108. switch (result.r[i])
  109. {
  110. case '1':
  111. x -= 2;
  112. y += 1;
  113. break;
  114. case '2':
  115. x -= 1;
  116. y += 2;
  117. break;
  118. case '3':
  119. x += 1;
  120. y += 2;
  121. break;
  122. case '4':
  123. x += 2;
  124. y += 1;
  125. break;
  126. case '5':
  127. x -= 2;
  128. y -= 1;
  129. break;
  130. case '6':
  131. x -= 1;
  132. y -= 2;
  133. break;
  134. case '7':
  135. x += 2;
  136. y -= 1;
  137. break;
  138. case '8':
  139. x += 1;
  140. y -= 2;
  141. break;
  142. }
  143. cout << convertToCell(x, y) << " ";
  144. }
  145. cout << convertToCell(finish.first, finish.second);
  146. system("pause>>void");
  147. return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement