fork download
  1. #include <iostream>
  2. #include <queue>
  3. using namespace std;
  4. int a=0,b=0,d[65537];
  5. queue<int> h;
  6. int main()
  7. {
  8. char x;
  9. for(int i=15;i>=0;i--)
  10. {
  11. cin>>x;
  12. a+=(x-48)*(1<<i);
  13. }
  14. for(int i=15;i>=0;i--)
  15. {
  16. cin>>x;
  17. b+=(x-48)*(1<<i);
  18. }
  19. h.push(a);
  20. d[a]=0;
  21. while(!h.empty())
  22. {
  23. a=h.front();
  24. h.pop();
  25. for(int i=0;i<=15;i++)
  26. if((a>>i)&1)
  27. {
  28. if(i<12)
  29. {
  30. if(((a>>(i+4))&1)==0)
  31. {
  32. int c=a|(1<<(i+4));
  33. c=c&(~(1<<i));
  34. if(!d[c])
  35. {
  36. d[c]=d[a]+1;
  37. h.push(c);
  38. if(c==b)
  39. {
  40. cout<<d[c];
  41. return 0;
  42. }
  43. }
  44. }
  45. }
  46.  
  47. if(i>3)
  48. {
  49. if(((a>>(i-4))&1)==0)
  50. {
  51. int c=a|(1<<(i-4));
  52. c=c&(~(1<<i));
  53. if(!d[c])
  54. {
  55. d[c]=d[a]+1;
  56. h.push(c);
  57. if(c==b)
  58. {
  59. cout<<d[c];
  60. return 0;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. if(i%4<3)
  67. {
  68. if(((a>>(i+1))&1)==0)
  69. {
  70. int c=a|(1<<(i+1));
  71. c=c&(~(1<<i));
  72. if(!d[c])
  73. {
  74. d[c]=d[a]+1;
  75. h.push(c);
  76. if(c==b)
  77. {
  78. cout<<d[c];
  79. return 0;
  80. }
  81. }
  82. }
  83. }
  84.  
  85. if(i%4)
  86. {
  87. if(((a>>(i-1))&1)==0)
  88. {
  89. int c=a|(1<<(i-1));
  90. c=c&(~(1<<i));
  91. if(!d[c])
  92. {
  93. d[c]=d[a]+1;
  94. h.push(c);
  95. if(c==b)
  96. {
  97. cout<<d[c];
  98. return 0;
  99. }
  100. }
  101. }
  102. }
  103.  
  104. }
  105. }
  106. }
Success #stdin #stdout 0s 3692KB
stdin
0001
0001
0001
0001
1000
1000
1000
1000
stdout
12