Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3.  
  4. using namespace std;
  5.  
  6. int x, i, j, i_0 = 0, j_0 = 0, dist[4], mindist, min_i;
  7.  
  8. stack <int> step;
  9.  
  10. struct matrix
  11. {
  12. int arr[3][3];
  13. };
  14.  
  15. struct Pair
  16. {
  17. int x;
  18. int y;
  19. };
  20.  
  21. Pair search(int a, int(&arr2)[3][3])
  22. {
  23. Pair xy;
  24. for (int i = 0; i < 3; i++)
  25. for (int j = 0; j < 3; j++)
  26. if (arr2[i][j] == a)
  27. {
  28. xy.x = i;
  29. xy.y = j;
  30. return xy;
  31. }
  32. }
  33.  
  34. int sum(int(&arr1)[3][3], int(&arr2)[3][3])
  35. {
  36. int dist = 0;
  37. Pair arg;
  38. for (i = 0; i < 3; i++)
  39. for (j = 0; j < 3; j++)
  40. {
  41. Pair arg = search(x, arr2);
  42. dist = dist + abs(arg.x - i) + abs(arg.y - j);
  43. }
  44. return dist;
  45. }
  46.  
  47. int arr1[3][3]
  48. {
  49. { 1, 2, 3 },
  50. { 8, 0, 4 },
  51. { 7, 6, 5 }
  52. };
  53. int arr2[3][3]
  54. {
  55. {5, 3, 4},
  56. {6, 0, 7},
  57. {8, 2, 1}
  58. };
  59.  
  60. int main()
  61. {/*
  62. for (int i = 0; i < 3; i++)
  63. for (int j = 0; j < 3; j++)
  64. cin >> arr1[i][j];
  65. for (int i = 0; i < 3; i++)
  66. for (int j = 0; j < 3; j++)
  67. cin >> arr2[i][j];*/
  68. while (arr1 != arr2)
  69. {
  70. for (int i = 0; i < 3; i++)
  71. for (int j = 0; j < 3; j++)
  72. if (arr1[i][j] == 0)
  73. {
  74. i_0 = i;
  75. j_0 = j;
  76. if (i_0 < 2) //шаг вниз
  77. {
  78. swap(arr1[i_0][j_0], arr1[i_0 + 1][j_0]);
  79. dist[0] = sum(arr1, arr2);
  80. swap(arr1[i_0][j_0], arr1[i_0 + 1][j_0]);
  81. cout << endl;
  82. //for (int i = 0; i < 3; i++)
  83. // for (int j = 0; j < 3; j++);
  84. // /*cout << arr1[i][j];*/
  85. };
  86. if (i_0 > 0) //шаг вверх
  87. {
  88. swap(arr1[i_0][j_0], arr1[i_0 - 1][j_0]);
  89. dist[1] = sum(arr1, arr2);
  90. swap(arr1[i_0][j_0], arr1[i_0 - 1][j_0]);
  91. cout << endl;
  92. //for (int i = 0; i < 3; i++)
  93. // for (int j = 0; j < 3; j++);
  94. // /*cout << arr1[i][j];*/
  95. }
  96. if (j_0 < 2) //шаг вправо
  97. {
  98. swap(arr1[i_0][j_0], arr1[i_0][j_0 + 1]);
  99. dist[2] = sum(arr1, arr2);
  100. swap(arr1[i_0][j_0], arr1[i_0][j_0 + 1]);
  101. cout << endl;
  102. //for (int i = 0; i < 3; i++)
  103. // for (int j = 0; j < 3; j++);
  104. // /*cout << arr1[i][j];*/
  105. }
  106. if (j_0 > 0) //шаг влево
  107. {
  108. swap(arr1[i_0][j_0], arr1[i_0][j_0 - 1]);
  109. dist[3] = sum(arr1, arr2);
  110. swap(arr1[i_0][j_0], arr1[i_0][j_0 - 1]);
  111. cout << endl;
  112. //for (int i = 0; i < 3; i++)
  113. // for (int j = 0; j < 3; j++);
  114. // /*cout << arr1[i][j];*/
  115. }
  116. cout << endl;
  117. for (int i = 0; i < 3; i++)
  118. for (int j = 0; j < 3; j++)
  119. cout << arr1[i][j];
  120.  
  121. mindist = dist[0];
  122. for (int i = 1; i < 4; i++)
  123. if (dist[i] < mindist)
  124. {
  125. mindist = dist[i];
  126. min_i = i;
  127. }
  128.  
  129. if (min_i == 0)
  130. swap(arr1[i_0][j_0], arr1[i_0 + 1][j_0]);
  131. if (min_i == 1)
  132. swap(arr1[i_0][j_0], arr1[i_0 - 1][j_0]);
  133. if (min_i == 2)
  134. swap(arr1[i_0][j_0], arr1[i_0][j_0 + 1]);
  135. if (min_i == 3)
  136. swap(arr1[i_0][j_0], arr1[i_0][j_0 - 1]);
  137.  
  138. cout << endl;
  139. for (int i = 0; i < 3; i++)
  140. for (int j = 0; j < 3; j++)
  141. cout << arr1[i][j];
  142. /*matrix m;
  143. m.arr[3][3] = arr1[3][3];
  144. step.push(m.arr[3][3]);*/
  145. }
  146. }
  147.  
  148. return 0;
  149.  
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement