Advertisement
jeff69

Untitled

Apr 23rd, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #include <vector>
  2. #include <algorithm>
  3. #include <cstdlib>
  4. #include <complex>
  5. #include <iostream>
  6. #include<queue>
  7. #include <map>
  8. using namespace std;
  9. const int MX = 100007;
  10. const int MXN = 362887;
  11. const long double pi = acos(-1);
  12.  
  13. int main(){
  14. int omar = 0;
  15.  
  16. while (true)
  17. {int done = 0;
  18. omar++;
  19.  
  20. map <string, int> vis;
  21. char c;
  22. string a;
  23. cin >> c;
  24. int y = c - '0';
  25. cin >> a;
  26. if (a == "000000000")return 0;
  27. queue <string > Q;
  28. Q.push(a);
  29. vis[a] = 0;
  30. string tst = "123456789";
  31. bool cmp = 0;
  32. while (!Q.empty()){
  33. done++;
  34. if (done >= 1677216)break;
  35. string m = Q.front();
  36. Q.pop();
  37. if (vis[tst] != 0)break;
  38. string z = m;
  39. swap(z[0], z[1]);
  40. swap(z[3], z[4]);
  41. swap(z[0], z[4]);
  42. if (vis[z] == 0){//1
  43. vis[z] = vis[m] + 1;
  44.  
  45. Q.push(z);
  46. if (vis[z] == y)cmp = 1;
  47.  
  48. }z = m;
  49. swap(z[0], z[1]);
  50. swap(z[3], z[4]);
  51. swap(z[1], z[3]);
  52. if (vis[z] == 0){//1
  53. vis[z] = vis[m] + 1;
  54. Q.push(z);
  55.  
  56. if (vis[z] == y)cmp = 1;
  57. }
  58. z = m;
  59. swap(z[1], z[2]);
  60. swap(z[5], z[4]);
  61. swap(z[5], z[1]);
  62. if (vis[z] == 0){//2
  63. vis[z] = vis[m] + 1;
  64. Q.push(z);
  65.  
  66. if (vis[z] == y)cmp = 1;
  67. }
  68. z = m;
  69. swap(z[1], z[2]);
  70. swap(z[5], z[4]);
  71. swap(z[4], z[2]);
  72. if (vis[z] == 0){//2
  73. vis[z] = vis[m] + 1;
  74. Q.push(z);
  75.  
  76. if (vis[z] == y)cmp = 1;
  77. }
  78. z = m;
  79. swap(z[3], z[4]);
  80. swap(z[6], z[7]);
  81. swap(z[4], z[6]);
  82. if (vis[z] == 0){//3
  83. vis[z] = vis[m] + 1;
  84. Q.push(z);
  85.  
  86. if (vis[z] == y)cmp = 1;
  87. }
  88. z = m;
  89. swap(z[3], z[4]);
  90. swap(z[6], z[7]);
  91. swap(z[7], z[3]);
  92. if (vis[z] == 0){//3
  93. vis[z] = vis[m] + 1;
  94. Q.push(z);
  95.  
  96. if (vis[z] == y)cmp = 1;
  97. }
  98. z = m;
  99.  
  100. swap(z[5], z[4]);
  101. swap(z[8], z[7]);
  102. swap(z[4], z[8]);
  103. if (vis[z] == 0){//4
  104. vis[z] = vis[m] + 1;
  105. Q.push(z);
  106.  
  107. if (vis[z] == y)cmp = 1;
  108. }
  109. z = m;
  110. swap(z[5], z[4]);
  111. swap(z[8], z[7]);
  112. swap(z[7], z[5]);
  113. if (vis[z] == 0){//4
  114. vis[z] = vis[m] + 1;
  115. Q.push(z);
  116.  
  117. if (vis[z] == y)cmp = 1;
  118. }
  119. if (cmp)break;
  120.  
  121. }
  122. if (vis[tst]){
  123. if (vis[tst] <= y)cout << vis[tst];
  124. }
  125. else{
  126. if (tst == a)cout << 0;
  127. else cout<<-1;
  128. }
  129.  
  130. cout << endl;
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement