• Source
    1. #include <iostream>
    2. #include <math.h>
    3. #include <vector>
    4. #include <queue>
    5. using namespace std;
    6.  
    7. vector <int> dinh[102];
    8. int dd[102];
    9. int buoc[102];
    10. vector <int> Xe[102];
    11. vector <int> Vua[102];
    12. vector <int> Tinh[102];
    13.  
    14. int xx[]={+0, -1, -1, -1, +0, 1, 1, +1};
    15. int yy[]={-1, -1, +0, +1, +1, 1, 0, -1};
    16.  
    17. void khoitaoKN ()
    18. {
    19.  
    20. int dem=0;
    21. for (int i=0; i<8; i++)
    22. {
    23. for (int j=0; j<8; j++)
    24. {
    25. dem++;
    26. dinh[i].push_back(dem);
    27. }
    28. }
    29. for (int i=0; i<8; i++)
    30. {
    31. for (int j=0; j<8; j++)
    32. {
    33. //For Xe;
    34. for (int k=0; k<8; k++)
    35. {
    36. if (k!=j) Xe[dinh[i][j]].push_back(dinh[i][k]);
    37. if (k!=i) Xe[dinh[i][j]].push_back(dinh[k][j]);
    38. }
    39.  
    40. //For tinh;
    41. int min1=min (7-i, 7-j);
    42. for (int k=1; k<=min1; k++) Tinh[dinh[i][j]].push_back(dinh[i+k][j+k]);
    43. int min2=min (i-0, 7-j);
    44. for (int k=1; k<=min2; k++) Tinh[dinh[i][j]].push_back(dinh[i-k][j+k]);
    45. int min3=min (i-0, j-0);
    46. for (int k=1; k<=min3; k++) Tinh[dinh[i][j]].push_back(dinh[i-k][j-k]);
    47. int min4=min (7-i, j-0);
    48. for (int k=1; k<=min4; k++) Tinh[dinh[i][j]].push_back(dinh[i+k][j-k]);
    49. //For Hau;
    50. for (int k=0; k<8; k++)
    51. {
    52. int X=j+xx[k];
    53. int Y=i+yy[k];
    54. if (X>=0 && X<=7 && Y>=0 && Y<=7) Vua[dinh[i][j]].push_back(dinh[Y][X]);
    55. }
    56. }
    57. }
    58. }
    59.  
    60. void reset ()
    61. {
    62. for (int i=0; i<=99; i++)
    63. {
    64. dd[i]=0;
    65. buoc[i]=0;
    66. }
    67. }
    68.  
    69. void BFS (int u, vector <int> XTV[])
    70. {
    71. queue <int> Q;
    72. Q.push (u);
    73. dd[u]=1;
    74. buoc[u]=0;
    75. while (!Q.empty ())
    76. {
    77. int x = Q.front ();
    78. Q.pop();
    79. for (int i=0; i<XTV[x].size(); i++)
    80. {
    81. int next=XTV[x][i];
    82. if (dd[next]==0)
    83. {
    84. Q.push (next);
    85. dd[next]=1;
    86. buoc[next]=buoc[x]+1;
    87. }
    88. }
    89. }
    90. }
    91.  
    92. int main ()
    93. {
    94. int r1, c1, r2, c2;
    95. cin>>r1>>c1>>r2>>c2;
    96.  
    97. khoitaoKN ();
    98.  
    99. reset ();
    100. BFS (dinh[r1-1][c1-1], Xe);
    101. if (buoc[dinh[r2-1][c2-1]]!=0) cout<<buoc[dinh[r2-1][c2-1]]<<" ";
    102. else cout<<"0 ";
    103.  
    104. reset ();
    105. BFS (dinh[r1-1][c1-1], Tinh);
    106. if (buoc[dinh[r2-1][c2-1]]!=0) cout<<buoc[dinh[r2-1][c2-1]]<<" ";
    107. else cout<<"0 ";
    108.  
    109. reset ();
    110. BFS (dinh[r1-1][c1-1], Vua);
    111. if (buoc[dinh[r2-1][c2-1]]!=0) cout<<buoc[dinh[r2-1][c2-1]];
    112. else cout<<"0";
    113.  
    114. return 0;
    115. }