Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 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.           min_i=2;
  129.                     if (min_i == 0){
  130.                         swap(arr1[i_0][j_0], arr1[i_0 + 1][j_0]);
  131.             break;
  132.           }
  133.                     if (min_i == 1){
  134.                         swap(arr1[i_0][j_0], arr1[i_0 - 1][j_0]);
  135.             break;
  136.           }
  137.                     if (min_i == 2){
  138.                         swap(arr1[i_0][j_0], arr1[i_0][j_0 + 1]);
  139.             break;
  140.           }
  141.                     if (min_i == 3){
  142.                         swap(arr1[i_0][j_0], arr1[i_0][j_0 - 1]);
  143.           break;
  144.           }
  145.                     /*matrix m;
  146.                     m.arr[3][3] = arr1[3][3];
  147.                     step.push(m.arr[3][3]);*/
  148.                 }
  149.       cout << endl;
  150.                     for (int i = 0; i < 3; i++){
  151.                         for (int j = 0; j < 3; j++)
  152.                             cout << arr1[i][j] << ' ';
  153.               cout << endl;
  154.           }
  155. //  }
  156.    
  157.     return 0;
  158.  
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement